Расширение 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>
но, возможно, это не совсем то, что вы хотите ...