有沒有辦法,我們可以導入另一個名字的類? 就像我有一個名爲javax.C的類和另一個名爲java.C的類,我可以在名稱C1下導入javax.C,並在名稱C2下導入java.Classes。java,有沒有辦法,我們可以導入另一個名字的類
我們可以做這樣的事情在C#:
using Sys=System;
或VB:
Imports Sys=System
有沒有辦法,我們可以導入另一個名字的類? 就像我有一個名爲javax.C的類和另一個名爲java.C的類,我可以在名稱C1下導入javax.C,並在名稱C2下導入java.Classes。java,有沒有辦法,我們可以導入另一個名字的類
我們可以做這樣的事情在C#:
using Sys=System;
或VB:
Imports Sys=System
沒有,有沒有像在Java中。您只能以其原始名稱導入類,並且必須使用您不導入的所有名稱的完全限定名(java.lang
和當前類的包中除外)。
簡而言之,不,這在Java中是不可能的。
編號我認爲Java 故意開溝typedef
。好消息是,如果你看到一種類型,你就知道它是什麼。它不能成爲別的別名;或別名到別名...
如果一個新的概念真的值得一個新的名字,它最有可能值得一個新的類型也。
Sys=System
的使用示例將被大多數Java開發人員所詬病。
實際上,這只是一個例如,一個更好的用例就是導入帶有衝突名稱的類(這會一直髮生) – Pacerier 2011-04-24 01:02:10
@Pacerier名稱衝突在java中並不常見,當它發生時,使用包名稱的完整類名,其pu rpose是專門解決名稱衝突的。 – irreputable 2011-04-24 01:11:35
我不相信包的目的是專門解決名稱衝突。包是用於邏輯分組的。名稱衝突在OOP中是「預期的」,這就是爲什麼我們有包/名稱空間 – Pacerier 2011-04-24 01:51:27
你不能在所有的情況下做到這一點,因爲有些是final類,但你可以擴展該類
class RenameTest {
private static class MyRenamedClass extends ClassToRename { }
MyRenamedClass renamed = new ClassToRename("lol, the class was renamed");
void foo() {
renamed.originalFoo(); // because MyRenamedClass doesn't override any
// methods, it always defaults to the parent class
}
}
我想說清楚,我真的不覺得這是一件好事理念。只是說這是可能的。 – corsiKa 2011-04-24 01:07:48
+1爲「哈哈,班級更名爲」 – Pacerier 2011-04-24 01:54:03
不是一回事。例如,如果'RenameTest'使用MyRenamedClass'類型的參數創建一個公共方法,並且另一個類嘗試使用'ClassToRename'的實例調用該方法,則結果將是編譯錯誤。也無法訪問ClassToRename的* static * s。但是你並沒有說這是個好主意,只是增加更多的證據證明它不是。 – ToolmakerSteve 2015-06-24 20:52:41
Java不支持靜態重命名。其中一個想法是用新的類名稱來描述有問題的對象(但由於某些副作用/限制,可能不是一個好主意,例如,你的目標類可能有最終的修飾語。如果允許的話,如果明確的類型檢查使用getClass()
或等(例如低於改編自一個不同的答案)
class MyApp {
public static void main(String[] args) {
ClassToRename parent_obj = new ClassToRename("Original class");
MyRenamedClass extended_obj_class_renamed = new MyRenamedClass("lol, the class was renamed");
// these two calls may be treated as the same
// * under certain conditions only *
parent_obj.originalFoo();
extended_obj_class_renamed.originalFoo();
}
private static class ClassToRename {
public ClassToRename(String strvar) {/*...*/}
public void originalFoo() {/*...*/}
}
private static class MyRenamedClass extends ClassToRename {
public MyRenamedClass(String strvar) {super(strvar);}
}
}
您可以在Scala中做到這一點是這樣的:。 進口java.util中ArrayList的{=> JavaList} – bartektartanus 2016-12-31 15:22:31