有没有办法,我们可以导入另一个名字的类? 就像我有一个名为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