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