为什么必须使用.class
Java来获取Class
对象?为什么不像Ruby中的类名?
我知道Ruby
并且Java
非常不同.但是,.class
当您已经输入类名时,实际上必须键入它似乎是违反直觉的.
如果类上有静态方法,则键入MyClass.staticMethod()
,而不是MyClass.class.staticMethod()
.
这可能是一个毫无意义的问题,但我想知道是否有人可以启发我.
因为类和变量不在Java中共享命名空间,这意味着您可以拥有与现有类同名的变量.这个说法:
String Integer = "Integer";
是完全合法的,Integer
即使有一个类,Integer
也会创建一个名为的新String变量.
一个示例显示使用类名作为Class对象将是不明确的:
Class Integer = "Integer".getClass(); System.out.println(Integer.getName());
这会打印"java.lang.Integer"还是"java.lang.String"?
但是,如果变量Class Integer
只是影响定义class Integer
?
你认为阴影是好事吗?它经常造成混乱和令人讨厌的惊喜.但这当然值得商榷.此外,new Integer(42)
(构造函数String(int)未定义)现在变为运行时错误而不是编译时错误.
但是,如果我们只是禁止在现有类之后命名变量呢?
标准库中有很多类.这确实会缩小可用变量名称的命名空间.
但是如果我们只禁止import
在当前.java文件中编写的类之后命名变量呢?
...然后你添加一个新的导入,你的代码不再编译?