班级类型问题

时间:2010-03-05 16:57:44

标签: java generics

我有一个名为“toto”的类,我发送给执行以下操作的函数:

getData(toto);

public String getData(Class myClass) {
 javax.jdo.Query query = p.newQuery(myClass);
  List<myClass> list = (List<myClass>) pm.newQuery(query).execute();
 for (myClass element : list) {
   Do something here
 }
}

问题是我得到了类型编译错误。 我做错了什么?

乔尔

2 个答案:

答案 0 :(得分:2)

您不能将运行时变量用作泛型构造的“参数”(如List<X>)。如果您对所传授的课程有所了解,那么您可以限制:

public String getData(Class<? extends Something> myClass) {
  // ...
  List<Something> list = (List<Something>) // ...

答案 1 :(得分:1)

您可以通过以下方式实现:

public <T> String getData(Class<T> myClass) {
    javax.jdo.Query query = p.newQuery(myClass);
    List<T> list = (List<T>) pm.newQuery(query).execute();
    for (T element : list) {
       Do something here
    }
}

其中,如果您要在toString()上调用element以外的任何方法,则需要接口/基类型并将定义更改为<T extends YourInterface>