【发布时间】:2014-08-08 09:36:37
【问题描述】:
这是代码:
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? 抱歉,对于双重问题,但我尝试编写尽可能小的代码 sn-p(它不构成我真正的问题)。
关键是这里我不能从内部类中移除类型参数T,因为我必须声明它必须实现Iterator。
【问题讨论】:
-
在我看来,
T代表InnerClass可能隐藏了T与OuterClass。从InnerClass中删除类型参数,看看会发生什么。 -
谢谢,但我真正的问题要复杂一些。我编辑了我的问题。
-
如果你对你的实际代码尝试同样的事情会发生什么?说真的,试试看。将
<T>保留在implements Iterator<T>上,但删除InnerClass上的部分。 -
我现在实际上解决了我的问题。我应该只在内部类中编写“实现 Iterator
”而不重新创建新参数 T(这会影响外部参数)。
标签: java generics casting inner-classes