2013-09-27 118 views
0

我正試圖從數組中訪問一個對象的方法。出於某種原因,我可以調用的唯一方法是Object類的方法。幫幫我?這是我的代碼:無法訪問數組中的對象的方法

listItem = findViewById(myResourceId); 
TextView itemTextView = ((TextView)listItem.findViewById(R.id.list_item_text)); 
ImageView itemImageView = ((ImageView)listItem.findViewById(R.id.list_item_thumbnail)); 
ClassMember currentMember = myClassMembers[position]; 
itemImageView.setImageResource(getResources().getIdentifier(currentMember.getMemberThumbnailId())); 

問題是我無法調用我currentMember對象上的getMemberThumbnailId。

奇怪的是,我可以得到它,如果我做的

myClassMembers[position].getThumbnailId(); 

代替

ClassMember currentMember = myClassMembers[position]; 
currentMember.getThumbnailId(); 
+0

什麼是myClassMembers []'的聲明類型。 –

+0

該數組可能是Object類型的對象。 – npace

+0

沒有。該數組的類型爲ClassMember []。仍然不起作用。 – kmdupr33

回答

0

工作,如果你投的ClassMember currentMember,那麼你應該能夠有機會獲得方法你要。

你只需要確保你正在訪問的對象數組是正確的類型。如果需要的話,先做一次檢查。

if (currentMember instanceof ClassMember) { 
((ClassMember)currentMember).getMemberThumbnailId(); 

}

+0

當我投射currentMember時,編譯器告訴我投射是多餘的。 – kmdupr33

+0

有趣的是,那麼如果對象列表是CurrentMembers,那麼你應該看到可用的方法。如果你的IDE沒有告訴你爲什麼光標在它上面,我會感到驚訝。但通常或不是這是因爲它不是正確的類型...或者...該方法不是用'公共'屬性製作的,因此不能被看到。 –

+0

方法是公開的。我會嘗試重新啓動我的IDE,但我認爲這可能與我如何創建ClassMember數組有關。該數組是一個實例變量,我將其設置爲等於從構造函數獲得的另一個ClassMember數組參數。也許這與它有關。 – kmdupr33

0

你如何申報您的陣列?你已經宣佈它爲:

ClassMember myClassMembers = new ClassMember[anInt]; 

或你它聲明爲:

Object myClassMembers = new Object[anInt]; 

如果您選擇了第二個選項,那麼你就必須把對象返回到它的原始類型(ClassMember )。例如

ClassMember currentMember = (ClassMember) myClassMembers[position]; 

另一個因素可能是您如何將ClassMember實例添加到數組本身。

+0

這是我的聲明: ClassMember [] myClassMembers;公共類ClassListAdapter(上下文上下文,int資源,ClassMember []對象)超級(上下文,資源,對象); myResourceId =資源; myClassMembers = objects; } – kmdupr33

+0

yike。這沒有格式化得很好。抱歉。 – kmdupr33