【问题标题】:Object of an Interface接口对象
【发布时间】:2015-04-02 12:20:31
【问题描述】:

我对此代码有疑问:

ClassA {
  main() {
    List<Object> L1 = new ArrayList<Object>();
    System.out.println(L1.getClass().getName());
  }
}

输出:

java.util.ArrayList

我见过另一个 example ,其中 class.getName() 给出了封闭类的名称,即 Test$1 作为令人讨厌的类。

为什么我的类名是 arrayList 而不是 A$1

【问题讨论】:

  • 因为你没有匿名类。
  • 尝试使用匿名内部类制作对象并打印

标签: java oop interface


【解决方案1】:

仅仅是因为 ArrayList 类在您的类 ClassA未定义。它在java.util 包中定义 PS:你不能创建接口的对象,但你可以实现接口并创建它的实例

例如:

instance I{}
class C implements I{}

这是不合法的:I i=new I(); 没关系:I i=new C();

【讨论】:

    【解决方案2】:

    您似乎将 泛型 与内部类和匿名类混淆了。从某种意义上说你是对的,但 Generic 类的最大区别在于它在编译时被擦除。

    这意味着你不能在运行时查询它。

    所以ArrayList&lt;String&gt; 只是一个ArrayList,编译器会确保您永远不会将非字符串粘贴到其中,或者必须手动将检索到的内容转换为String

    其他类型的类是真正的类,尽管偶尔会出现奇怪的命名约定。

    【讨论】:

      【解决方案3】:

      L1 持有ArrayList 的引用,因此当您调用L1.getClass() 时,它将返回类类型class java.util.ArrayList,而L1.getClass().getName() 将返回java.util.ArrayList

      getName() : 该对象所代表的类或接口的名称

      在您的情况下,此对象是 L1,它包含 ArrayList 的引用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-04-10
        • 1970-01-01
        • 2011-06-27
        • 2016-02-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-30
        相关资源
        最近更新 更多