gpt4 book ai didi

java - 通用通配符的正确使用

转载 作者:行者123 更新时间:2023-12-01 09:11:29 24 4
gpt4 key购买 nike

我现在正在尝试让这段代码运行半个小时,但我不知道应该如何解决这个问题。其他一切都没有提示,但编译器一直向我尖叫 configurable.valueconfigurable.defaultValue 的类型不同。我很困惑,因为 ? 应该是通配符,对吗?

我对泛型还很陌生,所以我有点迷失。我还没有找到任何解决方案。

有没有一种解决方案,不会产生任何警告或错误?

ConfigurationManager.class 在这里:

public class ConfigurationManager
{
private final List<Configurable<?>> config;

public ConfigurationManager()
{
config = new ArrayList<Configurable<?>>();
}

public void register(Configurable<?> entry)
{
this.config.add(entry);
}

public void resetAll()
{
for(Configurable<?> configurable : this.config)
{
//Problem here
//Type mismatch: cannot convert from capture#3-of ? to capture#2-of ?
configurable.value = configurable.defaultValue;
}
}
}

Configurable.class 在这里:

public class Configurable<T>
{
ResourceAddress address;
protected T value;
protected final T defaultValue;

public Configurable(ResourceAddress address, T defaultValue)
{
this.address = address;
this.defaultValue = defaultValue;
this.value = this.defaultValue;
}

public ResourceAddress getAddress()
{
return address;
}

public void setValue(T value)
{
this.value = value;
}

public T getValue()
{
return value;
}
}

最佳答案

问题在于编译器无法识别 valuedefaultValue 属于同一对象,因此它不知道它们具有相同的类型。一种解决方案是创建一个类型捕获辅助方法以从循环中调用:

<T> void resetValue(Configurable<T> configurable) {
configurable.value = configurable.defaultValue;
}

正如 @chrylis 指出的,更好的解决方案可能是将实例方法添加到 Configurable 中:

public void resetValue() {
this.value = this.defaultValue;
}

关于java - 通用通配符的正确使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40897239/

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