私はこのコードを30分働かせようとしていますが、私はこれをどのように修正するべきかわかりません。他のすべては文句を言いませんが、コンパイラは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;
}
}
LHSとRHSタイプの厳密な解釈にはおそらく問題があります。その問題を完全に 'protected void resetToDefault()'で回避することは明らかです。 – chrylis