gpt4 book ai didi

java - 消除 java 泛型的类型参数

转载 作者:搜寻专家 更新时间:2023-10-30 21:33:11 25 4
gpt4 key购买 nike

代码:

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)使用:

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

如您所见,它有两个类型参数 PX。尽管如此,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);

最佳答案

我会将 Result 类更改为类似

class Result<X> {
Property<X> property;
List<X> list;
}

我认为编译器无法从 Property 推断出 X,因为您的 Result 类正在等待两个泛型的两个定义。

关于java - 消除 java 泛型的类型参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8416664/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com