将Type引用传递给方法

时间:2013-06-01 18:19:30

标签: java generics

我想编写一个方法来创建我在方法参数中定义的类型的List。因此,如果我有3个类:StudentTeacherJanitor,则该方法应创建一个List无论何种类型传递

public void methodName(TYPE){  
    List<TYPE> results = new List<TYPE>();  
}

我应该为TYPE使用什么?

4 个答案:

答案 0 :(得分:1)

您可以使用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

的类

答案 1 :(得分:0)

您想要的并不完全清楚,但有一个选项如下:

public <T>
void methodName(Class<T> clazz) {

    List<T> results = new ArrayList<T>();
    ...
}

然后您可以将其称为:

methodName(Student.class);

答案 2 :(得分:0)

如果这三个类可以从单个类继承或实现单个接口,那么您的方法签名可以是这样的:

public List<ParentClass/Interface> methodName(TYPE);

如果三个类与上面提到的普通合同无关,那么其他选择将是返回对象列表并在迭代对象列表时适当地转换对象:

public List<Object> methodName(TYPE);

答案 3 :(得分:0)

您可能需要查看a question of mine,然而,这会从另一方面解决问题。

基本上Java已经具备了这样的功能(随意离开那里):

Collections.<String>emptyList()

获取一个空List,其中的元素应该是String类型。 Java的源代码如下:

public static final List EMPTY_LIST = new EmptyList<Object>();
:
public static final <T> List<T> emptyList() {
  return (List<T>) EMPTY_LIST;
}