2016-10-20 106 views
0

我有類A和類D,這取決於我想添加到一個ArrayList的情況,然後使用instanceOf來確定哪個類存在。我不知道是否使用通配符和通用我有2個不同的類,我想添加到ArrayList什麼是定義ArrayList的最佳方式?

private ArrayList<?> mEntity = new ArrayList<>(); 

或者將其定義爲對象

private ArrayList<Object> mEntity = new ArrayList<>(); 
+1

如果您需要知道「A」類型和「D」類型是什麼,請保留2個列表。 –

+0

是否存在A和D的父類型,如果是soo,則使用該類型而不是Object。還有什麼特別的原因,你不能保持2 arraylists? – zerocool

+0

類A和D是否繼承相同的類? –

回答

1

正確的設計取決於你把一個或d從類型對象後,你會做什麼ArrayList

如果您對不同的A和D對象做了完全不同的事情,那麼即使它們具有公共字段,也沒有功能重疊。你仍然可以做

private ArrayList<Object> mEntity = new ArrayList<>(); 

但是,有一點幫助,如果你將處理對象像

for (int i=0 ; i < mEntity.size() ; i ++=) { 
    Object obj = mEntity.get(i); 
    if (obj instanceOf A) { 
     // Do Something 
    } else if (obj instanceOf D) { 
     // Do other things 
    } 
} 

取而代之的是,你可以很容易地使用兩個ArrayList對象。

但是,如果您在A和D中具有一些通用功能,並且您將通過此功能使用該對象,則可以將此通用功能封裝到接口中。

假設你會處理的對象,如

for (int i=0 ; i < mEntity.size() ; i ++=) { 
    Object obj = mEntity.get(i); 
    if (obj instanceOf A) { 
     A objA = (A) obj); 
     objA.workerMethod(); 
    } else if (obj instanceOf D) { 
     D objD = (D) obj; 
     objD.workerMethod(); 
    } 
} 

然後,如果沒有共同的方法,你可以定義一個接口,並使用多態

public interface CommonFunc { 
    void workerMethod(); 
} 

private ArrayList<CommonFunc> mEntity = new ArrayList<>(); 

for (int i=0 ; i < mEntity.size() ; i ++=) { 
    CommonFunc obj = mEntity.get(i); 
    obj.workerMethod(); 
} 

你甚至可以做到這一點,但它仍然有意義不大。

相關問題