Расширение как T, так и SomeInterface <T>в Java - PullRequest
8 голосов
/ 30 марта 2010

Я хочу создать класс, который принимает два параметра. Один должен быть напечатан просто как T. Другой должен быть напечатан как нечто, расширяющее как T, так и SomeInterface<T>. Когда я пытаюсь это сделать с помощью

public class SomeClass<T, S extends SomeInterface<T> & T>

тогда Java жалуется с

"Тип T не является интерфейсом; его нельзя указывать в качестве ограниченного параметра"

и если вместо этого я пытаюсь создать интерфейс для S с

public interface TandSomeInterface<T> extends SomeInterface<T>, T

тогда Java жалуется с

«Невозможно сослаться на параметр типа T как на супертип»

Есть ли способ сделать это на Java? Я думаю, что вы можете сделать это в C ++ ...?

Ответы [ 2 ]

3 голосов
/ 30 марта 2010

это работает, если вы расширяете интерфейс:

public class SomeClass<T extends I, S extends SomeInterface<T> & I>

но, может быть, это не совсем то, что вы хотите ...

3 голосов
/ 30 марта 2010

Нельзя создать интерфейс, который расширяет параметр типа T, поскольку нет контракта, который гарантировал бы T быть интерфейсом. И конечно, расширение интерфейса не допускается.

...