2013-10-02 33 views
1

我有這樣的代碼:如何從Java中的泛型列表中獲取參數類型?

List<TRt> listTrt; 
List<TRtKuesioner> listTrtKuesioner; 
List<TArtKuesioner> listTArtKuesioner; 
Object[] objects = new Object[] { 
    listTrt, listTrtKuesioner,listTArtKuesioner 
}; 

我可怎麼辦之類的函數我的願望如下:

for(Object o :objects){ 
    if(o instanceof List<TRt>){ 

    }else if(o instanceof List<TRtKuesioner>){ 


    }else if(o instanceof List<TArtKuesioner>){ 


    } 
} 

我怎樣才能做到這一點?

+0

簡而言之:不,你不能...... [類型擦除(http://docs.oracle.com/javase/tutorial/java/generics/erasure.html)就是這樣。 – ppeterka

回答

0

你可以用isAssignableFrom來模擬,檢查第一個元素,然後施放整個List。

例如:

public static void main(String[] args) throws Exception { 
     List<String> strings = new ArrayList<String>(); 
     strings.add("jora string"); 
     List<Integer> ints = new ArrayList<Integer>(); 
     ints.add(345); 
     Object[] objs = new Object[]{strings,ints}; 
     for (Object obj : objs){ 
      if (isListInstanceOf(obj, String.class)){ 
       List<String> strs = castListTo(obj, String.class); 
       for (String str : strs){ 
        System.out.println(str); 
       } 
      }else if (isListInstanceOf(obj, Integer.class)){ 
       List<Integer> inList = castListTo(obj, Integer.class); 
       for (Integer integ : inList){ 
        System.out.println("Int: "+integ); 
       } 
      } 
     } 
    } 


    public static boolean isListInstanceOf(Object list, Class clazz){ 
     return (list instanceof List && ((List)list).size() > 0) ? ((List)list).get(0).getClass().isAssignableFrom(clazz) : false; 
    } 

    public static <T> List<T> castListTo(Object list, Class<T> clazz){ 
     try{ 
      return (List<T>)list; 
     }catch(ClassCastException exc){ 
      System.out.println("can't cast to that type list"); 
      return null; 
     } 
    } 
+0

感謝這對我也有幫助 – mrhands

0

只要名單非空,你可以用

if(((List)o).get(0) instanceof TRt)

模擬,但一個更好的想法是儘量避免對象數組完全。 你想做什麼?

相關問題