从内部类访问泛型外部类字段而不进行强制转换

时间:2014-06-18 07:37:32

标签: java generics casting inner-classes

这是代码:

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。

2 个答案:

答案 0 :(得分:1)

InnerClass#innerFieldOuterClass#outerField的类型不同,因为内部T参数隐藏了外部{{1}}。

答案 1 :(得分:1)

从@ user3580294建议删除InnerClas中的type参数。所以下面的编译没有任何错误。

public class OuterClass<T> {
    private T outerField;

    public class InnerClass {
        private T innerField;
        public void setField() {
            innerField =  outerField;
        }
    }
}