2010-03-05 4 views
0

У меня есть класс с именем «тотализатор», который я посылаю к функции, которая выполняет следующие действия:типа Class вопросы

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 
} 
} 

Проблема заключается в том, что я получаю ошибку компиляции типа. Что я делаю неправильно?

Joel

+0

Конечно, myClass не является типом. –

ответ

2

Вы не можете использовать переменную среды выполнения в качестве «аргумента» к дженериков конструкции (например, List<X>). Если вы знаете что-то о классах вы будете проходить в, то вы можете ограничить, что:

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

Спасибо !!! Очень полезно! – Joel

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>

Смежные вопросы