Как бы выразить следующий тип отношений в Java дженериков:Общие типы переменных типа?
class MyClass<T> { }
interface MyInterface<T extends MyClass> {
void m1(T<Integer> argument);
void m2(T<String> argument);
void m3(T<?> argument);
}
без компилятора жалобы. Возможно ли это? Я хочу удостовериться, что все методы получают тот же (дополнительный) класс MyClass
, не нарушая безопасность типа. В домене разные подклассы og MyClass
не будут иметь места. Действительно ли я должен перечислить три общие переменные типа, как это:
class MyClass<T> { }
interface MyInterface<T1 extends MyClass<Integer>,
T2 extends MyClass<String>, T3 extends MyClass<?>> {
void m1(T1 argument);
void m2(T2 argument);
void m3(T3 argument);
}
Я чувствую, как это страшно читать и не делает ни выразить свое намерение так хорошо, как я хотел. Этот вопрос связан с моим другим вопросом о дженериках Raw types inside of generic definition, который все еще меня смущает. Может быть, кто-то может помочь! Спасибо.
Вы определенно не можете использовать 'T <>' в Java-генераторах. Ваше решение, вероятно, является наилучшим доступным решением. –
Ну, проблема в том, что у меня есть интерфейс с arround 20 разных типов ... Я ненавижу использование этого интерфейса, и все же мне это нужно. Либо пользователи не получают безопасности по типу, либо печатают навсегда, оба решения не совсем такие. –