java - 从内部类访问通用外部类字段而不进行强制转换

标签 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 = externalField”以避免强制转换为 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 = externalField”以避免强制转换为 T? 抱歉,对于双重问题,但我尝试编写尽可能小的代码片段(并且它不包含我真正的问题)。

重点是,我不能在这里从内部类中删除类型参数 T,因为我必须声明它必须实现 Iterator。

最佳答案

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

public class OuterClass<T> {
    private T outerField;

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

关于java - 从内部类访问通用外部类字段而不进行强制转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24279645/

相关文章:

c++ - 为什么我无法阻止不受欢迎的 C 风格强制转换进行编译?

c++ - 当我们进行向下转型时内部会发生什么?

java - 检查重复的用户输入数组值时出错

c# - 使用基类作为 IEnumerable<T> 的泛型

java - 如何让 Java Iterable 从扩展泛型返回基本子类型

C#语法糖重载

将 void* 转换为二维数组

java - 将除第 n 个元素之外的所有元素添加到另一个 arraylist

java - 使用C++将类文件转换为jar文件

java - ubuntu : Could not load the property file 'output_xml.properties' for output method 'xml' 上的 openjdk-1.7.0_55