为什么Java中必须使用.class
来获取Class
对象?为什么不像 Ruby 中那样只是类名?
我知道 Ruby
和 Java
非常不同。但是,当您已经输入了类名时,实际上必须输入 .class
似乎违反直觉。
如果类中有静态方法,则输入 MyClass.staticMethod()
,而不是 MyClass.class.staticMethod()
。
这可能是一个毫无意义的问题,但我想看看是否有任何人可以启发我。
最佳答案
因为类和变量在 Java 中不共享命名空间,这意味着您可以拥有与现有类同名的变量。这个声明:
String Integer = "Integer";
是完全合法的并创建一个名为 Integer
的新字符串变量,即使有 a class Integer
.
一个示例表明使用类名作为 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) 未定义)现在变为运行时错误而不是编译时错误。
但是如果我们只是禁止在现有类之后命名变量呢?
标准库中有相当多的类。这确实会缩小可用变量名的命名空间。
但是,如果我们只禁止在当前 .java 文件中导入
的类之后命名变量呢?
...然后您添加了一个新的导入并且您的代码不再编译?
关于java - Java中为什么要用.class来获取Class对象呢?为什么不像 Ruby 那样只是类名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34548396/