我正试图让这段代码现在工作半小时,我不知道,我应该如何解决这个问题。其他一切都没有抱怨,但编译器一直在尖叫着我configurable.value
与configurable.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;
}
}
答案 0 :(得分:1)
问题是编译器没有识别出value
和defaultValue
属于同一个对象,因此它不知道它们具有相同的类型。一种解决方案是创建一个类型捕获帮助器方法来从您的循环调用:
<T> void resetValue(Configurable<T> configurable) {
configurable.value = configurable.defaultValue;
}
正如@chrylis所指出的,更好的解决方案可能是向Configurable
添加实例方法:
public void resetValue() {
this.value = this.defaultValue;
}