如何避免原始类型混合泛型继承和内部 类?
How to avoid raw type mixing generic inheritance and inner classes?
我的 class 是从 parent class 继承的,它通过一个 grandparent 使用泛型。
同样的 class 还包含一个 内部 Class - 用于生成器。
当我影响一个泛型类型的变量时,我得到了一个编译 warning.
Note: Child.java uses unchecked or unsafe operations.
这是我项目的 over-simplified 版本。
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中使用 grandparent 泛型的正确方法是什么?
换句话说,如何使 iDoUnsafeStuff()
中的 Other
类型匹配 grandparent 泛型?
请注意,我想了解问题所在,而不是抑制警告。
问题在这里:
public class Parent<T> extends GrandParent
改为
public class Parent<T> extends GrandParent<T>
以便 Parent
和 GrandParent
具有相同的通用类型参数。
否则Parent
的泛型类型参数T
和GrandParent
的protected T t;
成员之间没有关系。
我的 class 是从 parent class 继承的,它通过一个 grandparent 使用泛型。 同样的 class 还包含一个 内部 Class - 用于生成器。 当我影响一个泛型类型的变量时,我得到了一个编译 warning.
Note: Child.java uses unchecked or unsafe operations.
这是我项目的 over-simplified 版本。
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中使用 grandparent 泛型的正确方法是什么?
换句话说,如何使 iDoUnsafeStuff()
中的 Other
类型匹配 grandparent 泛型?
请注意,我想了解问题所在,而不是抑制警告。
问题在这里:
public class Parent<T> extends GrandParent
改为
public class Parent<T> extends GrandParent<T>
以便 Parent
和 GrandParent
具有相同的通用类型参数。
否则Parent
的泛型类型参数T
和GrandParent
的protected T t;
成员之间没有关系。