Расширение T и SomeInterface в Java

Я хочу создать класс, который принимает два параметра. Один должен быть напечатан просто как 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 ответов


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


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

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

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