我的类继承自通过祖父母使用泛型的父类。 同一个类还包含 Inner Class - 用于构建器。 当我影响泛型类型的变量时,我得到了编译警告。
Note: Child.java uses unchecked or unsafe operations.
这是我项目的过度简化版本。
public class Other
{}
public class GrandParent<T>
{
protected T t;
}
public class Parent<T> extends GrandParent
{}
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}}类型与祖父母通用相匹配?
请注意我想了解什么是错误,而不是取消警告。
答案 0 :(得分:4)
问题在于:
public class Parent<T> extends GrandParent
将其更改为
public class Parent<T> extends GrandParent<T>
以使Parent
和GrandParent
具有相同的泛型类型参数。
否则T
的通用类型参数Parent
与protected T t;
的{{1}}成员之间没有任何关系。