2013-05-25 8 views
8

List chứa các loại đối tượng, nhưng tôi cần phải kiểm tra xem đối tượng đó là loại A hoặc B:Kiểm tra loại hình Danh sách đối tượng <?> chứa

A a = new A(); 
B b = new B(); 

List<A> aL = new ArrayList<A>(); 
List<B> bL = new ArrayList<B>(); 

Làm thế nào tôi có thể kiểm tra xem List chứa A đối tượng hoặc B các đối tượng?

Đây là mã:

SegmentDetailInfo segmentDetailInfo = new SegmentDetailInfo(); 
    segmentDetailInfo.setSeg_Id("1"); 

    SegReqInfoBean segReqInfoBean = new SegReqInfoBean(); 
    segReqInfoBean.setPageName("homepage"); 

    List<SegmentDetailInfo> rhsList1 = new ArrayList<SegmentDetailInfo>(); 
    rhsList1.add(segmentDetailInfo); 

    List<SegReqInfoBean> rhsList2 = new ArrayList<SegReqInfoBean>(); 
    rhsList2.add(segReqInfoBean); 

    doProspecListCompareCheck(rhsList1); 
    doProspecListCompareCheck(rhsList2); 

} 

private static void doProspecListCompareCheck(Object rhsList) { 
    if (rhsList instanceof List<SegmentDetailInfo>) //wrong Check 
     //DoTHIS 
    else if(rhsList instanceof List<SegReqInfoBean>) //wrong Check  
     //Do THIS  

} 

================================== ======================

SegmentDetailInfo segmentDetailInfo = new SegmentDetailInfo(); 
    segmentDetailInfo.setSeg_Id("1"); 

    SegReqInfoBean segReqInfoBean1 = new SegReqInfoBean(); 
    segReqInfoBean1.setPageName("Home"); 

    List<SegmentDetailInfo> rhsList1 = new ArrayList<SegmentDetailInfo>(); 
    rhsList1.add(segmentDetailInfo); 

    List<SegReqInfoBean> rhsList2 = new ArrayList<SegReqInfoBean>();  
    rhsList2.add(segReqInfoBean1); 

    String Homepage="homepage"; 

    doProspecListCompareCheck(Homepage); 
    doProspecListCompareCheck(rhsList2); 
    doProspecListCompareCheck(rhsList2); 


private static void doProspecListCompareCheck(Object rhsListObj) { 
     List<String> rhsStrList = new ArrayList<String>(); 
     List<SegReqInfoBean> segReqInfoBeanList = new ArrayList<SegReqInfoBean>(); 
     List<SegmentDetailInfo> segmentDetailInfoList = new ArrayList<SegmentDetailInfo>(); 


    if (rhsListObj != null && rhsListObj instanceof List) { 

     if (((List<SegmentDetailInfo>) rhsListObj).get(0) instanceof SegmentDetailInfo){ 

       System.out.println("SegmentDetailInfo loading"); 
       segmentDetailInfoList = (List<SegmentDetailInfo>) rhsListObj;  
     } 
     else if(((List<SegReqInfoBean>) rhsListObj).get(0) instanceof SegReqInfoBean){ 

       System.out.println("SegReqInfoBean loading"); 
       segReqInfoBeanList = (List<SegReqInfoBean>) rhsListObj; 
     }   

    }else if (rhsListObj != null && rhsListObj instanceof String) { 

     rhsStrList.add(rhsListObj.toString()); 

    } 

} 
+3

Loại tẩy xoá ngăn bạn làm điều đó. –

+2

Trong kịch bản * rất hẹp * này, bạn có thể kiểm tra '((List) rhsList) .get (0) instanceof SegReqInfoBean'. Nó đòi hỏi bạn có một cái gì đó trong danh sách, nếu không thì không có cách nào để nói. – Dennis

Trả lời

13

Một cách để bạn có thể làm điều đó là bằng cách so sánh đầu tiên Object bên trong List:

private static void doProspecListCompareCheck(List rhsList) 
{ 
    if(rhsList != null && !rhsList.isEmpty()) 
    { 
     if (rhsList.get(0) instanceof SegReqInfoBean) 
     { 

     } 
     else if(rhsList.get(0) instanceof SegmentDetailInfo)  
     { 

     } 
    } 
} 
+0

Có lẽ nên thay đổi kiểu tham số thành 'Danh sách'. – clav

+0

@clav Có từ khi chúng tôi luôn muốn nhận được ° ° ° °, ít nhất! –

+0

Cảm ơn Alex Đó là cách đúng đắn để imp ......? – Shivababa

3

Generics chỉ cung cấp kiểm tra thời gian biên dịch. Khi chạy, chúng hoàn toàn biến mất. Điều này được gọi là loại tẩy xoá. Vì vậy, khi chạy, mã của bạn trông giống như sau:

List rhsList1 = new ArrayList(); 
    rhsList1.add(segmentDetailInfo); 

    List rhsList2 = new ArrayList(); 
    rhsList2.add(segReqInfoBean); 

    doProspecListCompareCheck(rhsList1); 
    doProspecListCompareCheck(rhsList2); 

} 
private static void doProspecListCompareCheck(Object rhsList) { 


    if (rhsList instanceof List) //wrong Check 
     //DoTHIS 
    else if(rhsList instanceof List) //wrong Check  
     //Do THIS  

} 

Phân biệt hai đối tượng chung theo tham số chung của chúng đơn giản không phải là thứ bạn có thể làm trong Java.

0

Nếu bạn biết danh sách là không có sản phẩm nào bạn có thể làm rhsList.get (0) instanceof SegReqInfobean

Nếu danh sách có thể trống, bạn có thể bắt đầu bằng cách chèn một đối tượng đúng loại và sau đó nhớ rằng chỉ mục 0 lưu trữ một đối tượng giả, vì vậy hãy xóa nó trước khi xử lý (hoặc chỉ bắt đầu xử lý danh sách tại chỉ mục 0). Generics chỉ là một tiện ích thời gian biên dịch. Bạn không thể sử dụng kiểu generic khi chạy.