这是代码:
public class OuterClass<T> {
private T outerField;
public class InnerClass<T> {
private T innerField;
public void setField() {
innerField = (T) outerField;
}
}
}
有没有一种方法可以写"innerField=outerField"以避免转换为T?
我觉得这不是访问泛型外部类字段的正确方式,因为内部类应该知道外部字段的类型。
编辑:我尝试了你的建议,它在我发布的代码样本中起到了作用。但我真正的代码是这样的:
public class OuterClass<T extends Comparable<T>> implements Iterable<T> {
private T outerField;
@Override
public Iterator<T> iterator() {
return null;
}
public class InnerClass<T extends Comparable<T>> implements Iterator<T> {
@Override
public boolean hasNext() {
return false;
}
@Override
public T next() {
T innerField = (T) outerField;
return null;
}
@Override
public void remove() {
}
}
}
同样,如何编写"innerField=outerField"以避免强制转换为T?很抱歉,出现了双重问题,但我试着写尽可能小的代码片段(但这并没有构成我真正的问题(。
重点是,我不能从内部类中删除类型参数T,因为我必须声明它必须实现Iterator。
按照@user3580294的建议,从InnerClass中删除类型参数。所以下面的编译没有任何错误。
public class OuterClass<T> {
private T outerField;
public class InnerClass {
private T innerField;
public void setField() {
innerField = outerField;
}
}
}
InnerClass#innerField
不需要与OuterClass#outerField
具有相同的类型,因为内部T
参数隐藏了外部参数。