Параметры вложенного типа в Java

Это пример, который я сделал для упрощения моего реального кода, поэтому я прошу прощения, если он немного надуманный. То, что я хотел бы сделать, это эффективно получить два параметра типа из одного аргумента вложенного типа. Я почти уверен, что это невозможно, но я решил попробовать.

//Not legal java code
public class Foo<C extends Collection<T>> { //where T is another type parameter
    private C coll;

    public Foo(C coll) {
        this.coll = coll;
    }

    public void add(T elem){
        this.coll.add(elem);
    }
    //UPDATED TO ADD GETTER
    /**
     * I may need to retrieve the collection again, or pass it
     * on to another function that needs the specific C type
     */
    public C getColl(){
        return coll;
    }
}
...
List<String> strings = new ArrayList<String>();
Foo<List<String>> foo = new Foo<List<String>>(strings);
foo.add("hello");

Я знаю, что я мог бы сделать это, добавив еще один параметр типа:

public class Foo<C extends Collection<T>,T>

но тогда я должен добавить лишнее:

Foo<List<String>,String> foo = new Foo<List<String>,String>(strings);

И в моем случае с реальным миром мои дженерики могут иногда указываться в предложении

public class Bar implements Baz<String>

Необходимость указать этот параметр второго типа еще более болезненна, потому что мне кажется, что он бросает детали реализации в мое лицо. Должен сказать

Foo<Bar,String>

когда уже есть отношения между Стрингом и Баром, это просто выглядит не элегантно. Я понимаю, что это Java, так что это идет с территорией, но просто любопытно, было ли решение для этого.

Ответы на вопрос(3)

Ваш ответ на вопрос