如何避免原始类型混合泛型继承和内部类?

时间:2016-09-08 06:08:09

标签: java generics inheritance inner-classes

我的类继承自通过祖父母使用泛型的父类。 同一个类还包含 Inner Class - 用于构建器。 当我影响泛型类型的变量时,我得到了编译警告

Note: Child.java uses unchecked or unsafe operations.

这是我项目的过度简化版本。

Other.java

public class Other
{}

GrandParent.java

public class GrandParent<T>
{
    protected T t;
}

Parent.java

public class Parent<T> extends GrandParent
{}

Child.java

public class Child extends Parent<Other>
{
    // Inner class
    public static class Inner
    {
        public void iDoUnsafeStuff(Other other) {
            Child child = new Child();
            child.t = other;
        }
    }
}

这是使用-Xlint:unchecked的更详细的编译输出。

Child.java:8: warning: [unchecked] unchecked assignment to variable t as member of raw type GrandParent
        child.t = other;

使用祖父母的泛型类型在Java中使用的正确方法是什么?

换句话说,如何使Other的{​​{1}}类型与祖父母通用相匹配?

请注意我想了解什么是错误,而不是取消警告。

1 个答案:

答案 0 :(得分:4)

问题在于:

public class Parent<T> extends GrandParent

将其更改为

public class Parent<T> extends GrandParent<T>

以使ParentGrandParent具有相同的泛型类型参数。

否则T的通用类型参数Parentprotected T t;的{​​{1}}成员之间没有任何关系。