次の例では、戻り値タイプList<? extends IConfigUser>
をList<ConfigUser>
として、getUserList()
にオーバーライドすることはできますが、setUserList()
のパラメータで同じことを行うことはできません。このクラスがスーパータイプと見なされないのはなぜですか?
ConfigUser
は、この場合、IConfigUser
のスーパータイプと見なされませんか?
public class Test {
public interface IConfigUser {
}
public interface IConfig {
public List<? extends IConfigUser> getUserList();
public void setUserList(List<? extends IConfigUser> list);
}
public class ConfigUser implements IConfigUser {
}
// The type Test.Config must implement the inherited abstract method
// Test.IConfig.setUserList(List<? extends Test.IConfigUser>)
public class Config implements IConfig {
@Override
public List<ConfigUser> getUserList() {
return null;
}
// The method setUserList(List<ConfigUser> list) of type Test.Config
// must override or implement a supertype method
@Override
public void setUserList(List<ConfigUser> list)
{
}
}
}
これが*コンパイルして、誰かがListに渡したとします。 –