Я хочу создать класс, который берет два параметра. Нужно быть введен просто как 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++...?
Невозможно создать интерфейс, расширяющий параметр типа T
, поскольку нет контракта, который бы гарантировал T
интерфейсом. И, конечно же, интерфейс, расширяющий класс, не допускается.
это работает, если вы также расширяете интерфейс:
public class SomeClass<T extends I, S extends SomeInterface<T> & I>
но, возможно, это не совсем то, что вам нужно ...