Ale*_*uya 5 java generics interface
版本1
public interface Outer<T>{
public interface Inner<T>{
T get();
void set(T t);
}
}
Run Code Online (Sandbox Code Playgroud)
虽然相同的泛型类型语法,但这两种类型完全独立.
版本2
public interface Outer<T>{
public interface Inner<V extends T>{
V get();
void set(V t);
}
}
Run Code Online (Sandbox Code Playgroud)
出现错误:"无法对非静态类型T进行静态引用"
版本3
public interface Outer<T>{
public interface Inner{
<T> T get();
<T> void set(T m);
}
}
Run Code Online (Sandbox Code Playgroud)
不确定这是否是我想要的,但看起来很好(在eclipse中没有错误),所以我尝试实现它:
public Test implements interface Outer.Inner {
//no problem in these two
<T> T get(){..};
<T> void set(T m){...};
//Errors come up here:
Map<String,T> map;
public Test(Map<String,T> map){
this.map=map
}
}
Run Code Online (Sandbox Code Playgroud)
错误出现:"T无法解析为类型"
Map<String,T> map
public Test(Map<String,T> map){}
那么,我该如何解决这个问题呢?
首先,没有办法做到这一点,因为外部接口只不过是内部接口的“命名空间”。他们之间确实没有其他关系。
这就引出了一个问题:为什么你需要对事物进行这样的控制?如果在实现该接口的类中,确定使用相同的类型有意义,那么对该类来说也是如此。但另一个实现可以而且应该允许选择其他方式。尤其如此,因为实现 Outer 的类和实现 Inner 的类不限于相互嵌套。
归档时间: |
|
查看次数: |
1177 次 |
最近记录: |