我的代码存在严重问题;我正在使用实现此类接口的泛型、接口和类;总结一下:
配置监听器.java
public interface ConfigurationListener<T extends Configuration> {
public void configurationChange(ConfigurationProperty<?> [] changes, T configuration);
}
配置.java
public class Configuration {
...
protected HashSet<ConfigurationListener<? super Configuration>> listeners;
...
public void applyTo(ConfigurationListener<? super Configuration> listener) {
if (listeners.add(listener)) {
...
}
}
...
}
XMLConfiguration.java
public class XMLConfiguration extends Configuration {
...
@Override
public void applyTo(ConfigurationListener<? super Configuration> listener) {
tryLoad(); // Try to load the content of the XML file
super.applyTo(listener);
}
...
}
我在测试的时候发现如下问题,实在不明白为什么:
t3b.java
public class t3b {
public static class Human implements ConfigurationListener<XMLConfiguration> {
@Override
public void configurationChange(ConfigurationProperty<?>[] changes, XMLConfiguration configuration) {
...
}
}
public static void main(String [] args) {
XMLConfiguration conf = new XMLConfiguration("xmlconf.xml", "sectn", new ConfigurationProperty<?> [] {
new ConfigurationProperty<Integer>("age", 23),
new ConfigurationProperty<String>("name", "Juan")
});
conf.applyTo(new Human());
}
}
线
conf.applyTo(new Human());
打破这一切;Eclipse SDK 给了我以下错误:
XMLConfiguration 类型中的方法 applyTo(ConfigurationListener) 不适用于参数 (t3b.Human)
但是t3b.Human使用Configuration的子级来实现ConfigurationListener!这就是我不明白的。
我知道我的代码逻辑可能更简单,但我想知道它为什么会失败。
我认为发布ConfigurationProperty.java的代码根本不重要,但如果有帮助,请告诉我,我会发布它。
谢谢!