小编woo*_*ird的帖子

分配给泛型类型的Java原始类型值运行时getClss()方法错误

public class Box<T> {
    private T t;
    public Box(T t){
        this.t = t;
    }
    public void add(T t) {
      this.t = t;
    }
    public T get() {
      return t;
    }
    public static void main(String[] args) {
      Box<Integer> b = new Box(new String("may be"));
      System.out.println(b.get()); // successfully print out "may be"
      System.out.println(b.get().getClass()); // error
   }
}
Run Code Online (Sandbox Code Playgroud)

此代码给出了运行时错误:

exception in thread "main" java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer
Run Code Online (Sandbox Code Playgroud)
  1. 为什么b.get()不触发运行时错误?
  2. 为什么只有在我尝试获取类变量的类时才会发生运行时错误?

更确切地说:为什么编译器第二个checkcast字节码中插入指令(导致异常)? get()

java generics casting runtime

5
推荐指数
1
解决办法
349
查看次数

如果不同的Java泛型类型参数具有相同的名称,为什么可以为其分配不同的类型?

在oracle的官方java文档Type Inference章节中,有一个这样的例子:

static <T> T pick(T a1, T a2) { return a2; }  
Serializable s = pick("d", new ArrayList<String>());
Run Code Online (Sandbox Code Playgroud)

在这种情况下,类型参数是T但是传递了两种不同的类型,不应该a1的类型与a2相同吗?

java generics

3
推荐指数
1
解决办法
46
查看次数

标签 统计

generics ×2

java ×2

casting ×1

runtime ×1