[英]Passing in a Type reference to a method
我想編寫一個方法,該方法將創建我在方法參數中定義的類型的列表。 因此,如果我有3個班級: Student
, Teacher
和Janitor
,則該方法應創建一個傳入類型的List
public void methodName(TYPE){
List<TYPE> results = new List<TYPE>();
}
我應該為TYPE
使用什么?
您可以使用JAVA泛型。 一種方法是允許所有類類型都可以接受。
public <T> void methodName(Class<T> cl){
List<T> results = new ArrayList<T>();
}
或者說一種更好的方法是使您希望接受的所有類都派生自某個接口,例如Person
,然后您就可以做到。
public <T extends Person> void methodName(Class<T> cl){
List<T> results = new ArrayList<T>();
}
這將方法所接受的類集限制為僅實現Person
那些類。
目前尚不清楚您想要什么,但是一種選擇如下:
public <T>
void methodName(Class<T> clazz) {
List<T> results = new ArrayList<T>();
...
}
然后可以將其稱為:
methodName(Student.class);
如果這三個類可以從單個類繼承或實現單個接口,則您的方法簽名可以像這樣:
public List<ParentClass/Interface> methodName(TYPE);
如上所述,如果三個類不能與一個公共合同相關聯,那么另一種選擇是返回對象列表並在迭代對象列表時適當地轉換對象:
public List<Object> methodName(TYPE);
您可能想檢查一下我的問題 ,但是從另一個角度解決了這個問題。
Java基本上已經具有了這樣的功能(可以從那里隨意使用):
Collections.<String>emptyList()
以獲取一個空列表,其元素應該是字符串類型。 Java的來源如下所示:
public static final List EMPTY_LIST = new EmptyList<Object>();
:
public static final <T> List<T> emptyList() {
return (List<T>) EMPTY_LIST;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.