0

我想编写一个方法来创建我在方法参数中定义的类型的列表。因此,如果我有 3 个类:和Student,则该方法应该创建传入的任何类型的TeacherJanitorList

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

我应该用来做TYPE什么?

4

4 回答 4

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.

于 2013-06-01T18:29:14.080 回答
0

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

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

如果如上所述三个类不能与一个通用合同相关联,那么其他选择将是返回对象列表并在迭代对象列表时适当地转换对象:

public List<Object> methodName(TYPE);
于 2013-06-01T18:29:52.207 回答
0

您可能想查看我的一个问题,但是,它从另一面解决了这个问题。

基本上Java已经有这样的功能(随意从那里去):

Collections.<String>emptyList()

获取一个空列表,其中包含应该属于 String 类型的元素。Java 的源代码如下所示:

public static final List EMPTY_LIST = new EmptyList<Object>();
:
public static final <T> List<T> emptyList() {
  return (List<T>) EMPTY_LIST;
}
于 2013-06-01T18:30:33.857 回答
0

尚不完全清楚您想要什么,但一种选择如下:

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

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

然后,您可以将其称为:

methodName(Student.class);
于 2013-06-01T18:21:46.977 回答