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



这是代码:

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参数隐藏了外部参数。

最新更新