2013-03-17 3 views
3

У меня есть метод:Как использовать класс в качестве универсального типа маркеров

myMethod(Class class){} 

Я хочу, чтобы перейти к этому методу MyClass со всеми нисходящими классами, так изменил его:

myMethod(Class<MyClass> class){} 

И вызов:

myMethod(MyOtherClassExtendingMyClass.class) 

Тогда у меня есть ошибки компилятора:

The method myMethod(Class<MyClass>) in the type XXX is not applicable 
for the arguments (Class<MyOtherClassExtendingMyClass>) 

Как убедиться, что в качестве параметров этого метода будут разрешены только MyClass со всеми его нисходящими классами?

+1

измените заголовок вопроса :-) –

ответ

8

Используйте ограничена сверху подстановочные:

myMethod(Class<? extends MyClass>) {} 

Вы, вероятно, хотите, чтобы захватить подстановочные, тоже:

<T extends MyClass> void myMethod(Class<T> klass) {} 

На этот раз вы можете обратиться к T в организме.

+0

+1: Как в JLS Детальный: Http: // Docs. oracle.com/javase/specs/jls/se7/html/jls-4.html#d5e2547 – Aubin

1

Судя по вашему вопросу, я думаю, что вам нужно followng объявление методы myMethod:

myMethod(Class<? extends MyClass> clazz) 
Смежные вопросы