Код:
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);