2014-06-26 72 views
0

我看了http://developer.android.com/reference/android/widget/ListAdapter.html,看到ListAdapter是一個公共接口。從那我知道ArrayAdaptor執行ListAdaptor。要創建的引用類型ListAdaptorArrayAdaptor一個實例,我的代碼是:任何人都可以解釋爲什麼listAdapter不採取一般的論點?

ListAdapter adaptor = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1); 

(此編譯罰款)。

我的問題是爲什麼ListAdapter沒有采用任何通用參數?

我試着比較這個與List(公共接口)引用創建一個數組列表。要做到這一點我的代碼是:

List<String> l = new ArrayList<String>(); 

任何人都可以解釋兩個初始化過程之間的差異?
列表看起來更直觀,因爲如果父類是通用的,孩子也應該是。

+1

ListAdapter的父項是什麼?你什麼意思? – pskink

+0

我的意思是像list一樣是數組列表的「父」,方式相同,列表適配器是數組適配器的「父」。 – committedandroider

回答

1

你是不是通用的意思是什麼?該接口是一個非常通用的接口,它可以是任何類型數據的接口。它甚至不會強迫你訪問該數據的特定數據結構,如數組或光標。

你是說爲什麼不採取一般性的論據?因爲ListAdapter實際上比這更通用 - 它不關心列表中的數據類型,所以它不需要泛型類型。請注意,它的所有功能都不需要知道數據的類型。而List的確如此,因爲它提供了一系列需要知道類型的函數,例如添加和刪除。

+0

這是有道理的。應該指定泛型參數 – committedandroider

2

ArrayAdapter<T>實施ListAdapter。這意味着它遵守ListAdapter的合同。在這種情況下,這僅僅意味着它實現了方法areAllItemsEnabled()isEnabled(int position)

沒有理由ListAdapter應該採用泛型類型,因爲這兩個方法不涉及泛型類型。

相關問題