java - Java中为什么要用.class来获取Class对象呢?为什么不像 Ruby 那样只是类名?

标签 java

为什么Java中必须使用.class来获取Class对象?为什么不像 Ruby 中那样只是类名?

我知道 RubyJava 非常不同。但是,当您已经输入了类名时,实际上必须输入 .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/

相关文章:

java - 发布表单时设置请求属性

java - 我必须指定 jooq 结果类型吗?

java - 如何加快聚合查询?

java - 如何将 getter 作为 lambda 函数传递?

java - 调试从 Tomcat (JSP) 运行的 Java 程序

java - 使用 Apache http post 查询参数

java - Serenity BDD 类(class)或入门指南

java - 实时格式化 Android EditText 时如何避免 StackOverflow?

java - 如何更新 JViewPort

Java:Key类型和String之间的转换