程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> java-JAVA中使用泛型擦除的問題

java-JAVA中使用泛型擦除的問題

編輯:編程綜合問答
JAVA中使用泛型擦除的問題

import java.util.ArrayList;

public class Fanxing {

 public static void main(String[] args) throws Exception{  
     ArrayList<Integer> arrayList3=new ArrayList<Integer>();
     arrayList3.add(1);//這樣調用add方法只能存儲整形,因為泛型類型的實例為Integer
     arrayList3.getClass().getMethod("add", Object.class).invoke(arrayList3, "asd");
     for (int i=0;i<arrayList3.size();i++) {
        System.out.println(arrayList3.get(i));
     }


     ArrayList<String> arrayList2=new ArrayList<String>();
     arrayList2.add("asd");//這樣調用add方法只能
        存儲整形,因為泛型類型的實例為Integer
     arrayList2.getClass().getMethod("add", Object.class).invoke(arrayList2, 1);
     for (int i=0;i<arrayList2.size();i++) {
        System.out.println(arrayList2.get(i));
    }
 }  

}
輸出結果為:
1
asd
asd
Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
at Fanxing.main(Fanxing.java:19)

請問這是什麼問題?

最佳回答:


   我運行了下, 找到原因了, 原因是System.out.println() 造成的。
   這個方法可傳的參數為基礎類型和Object對象,還提供了一個String對象的方法參數。
   第一個例子中List是Integer泛型,System.out.println() 是沒有提供對應的方法參數, 所以會調用Object參數的方法,Integer轉Object是沒問題的,所以通過了。
   第二個例子中List是String泛型,System.out.println() 提供了String參數的就去,所以用的是以String為參數的方法,但是list中的第2個值你用了反射傳的是個數值,這裡會做個強轉,從Integer轉成String,所以出錯。
a63181182
a63181182
a63181182
a63181182
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved