Устранить параметр типа дженериков java

Код:

interface Property<T>
{
    T get();
}

class BoolProperty implements Property<Boolean>
{
    @Override
    public Boolean get()
    {
        return false;
    }
}
class StringProperty implements Property<String>
{
    @Override
    public String get()
    {
        return "hello";
    }
}
class OtherStringProperty implements Property<String>
{
    @Override
    public String get()
    {
        return "bye";
    }
    public String getSpecialValue()
    {
        return "you are special";
    }
}

используется моим классом:

class Result<P extends Property<X>, X>
{
    P p;
    List<X> list;
}

Как вы видите, он имеет два параметра типа P и X . Несмотря на это, X всегда можно вывести из P , но язык требует, чтобы я предоставил оба:

Result<BooleanProperty, Boolean> res = new Result<BooleanProperty, Boolean>();

Есть ли какой-нибудь способ избавиться от X параметр типа? Я хочу просто использовать

Result<BooleanProperty> res = new Result<BooleanProperty>();

Кроме того, я не хочу терять информацию о типе и использовать ее как:

Result<OtherStringProperty> res = new Result<OtherStringProperty>();
String spec = res.p.getSpecialValue();
String prop = res.list.get(0);
11
задан kan 7 December 2011 в 16:21
поделиться