kha*_*eeb 9 java eclipse java-sealed-type java-17
我有一个父抽象类和采用泛型的子类。
public abstract sealed class Parent<T> permits ChildA, ChildB {}
public non-sealed class ChildA<T extends FileTypeA> extends Parent{}
public non-sealed class ChildB<T extends FileTypeB> extends Parent{}
Run Code Online (Sandbox Code Playgroud)
在父类中,我收到警告:
ChildA is a raw type. References to generic type ChildA<T>
should be parameterized
ChildB is a raw type. References to generic type ChildB<T>
should be parameterized
Run Code Online (Sandbox Code Playgroud)
在儿童课程中,我收到警告:
Parent is a raw type. References to generic type Parent<T>
should be parameterized
Run Code Online (Sandbox Code Playgroud)
让它们像这样参数化:
public abstract sealed class Parent<T>
permits ChildA<T extends FileTypeA>, ChildB<T extends FileTypeB> {}
Run Code Online (Sandbox Code Playgroud)
甚至
public abstract sealed class Parent<T>
permits ChildA<T>, ChildB<T> {}
Run Code Online (Sandbox Code Playgroud)
给出错误:
Bound mismatch: The type T is not a valid substitute for the
bounded parameter <T extends FileTypeA> of the type ChildA<T>
Run Code Online (Sandbox Code Playgroud)
如何消除这些警告和错误?
Hol*_*ger 11
警告 \xe2\x80\x9c Parent is a raw type \xe2\x80\x9d 与密封类完全无关,因为使用extends ParentwhenParent<T>是泛型类会导致这样的警告,因为泛型存在。
您很可能想使用
\npublic non-sealed class ChildA<T extends FileTypeA> extends Parent<T> {}\n\npublic non-sealed class ChildB<T extends FileTypeB> extends Parent<T> {}\nRun Code Online (Sandbox Code Playgroud)\n另一个问题似乎是 Eclipse 错误,因为我只能在那里重现警告。当我将声明更改为 时permits ChildA<?>, ChildB<?>,警告消失,但您不应该这样做。
Java语言规范将该子句定义permits为
ClassPermits:\n permits TypeName {, TypeName}\nRun Code Online (Sandbox Code Playgroud)\n而TypeName 链接到
TypeName:\n TypeIdentifier\n PackageOrTypeName . TypeIdentifier\n\nPackageOrTypeName:\n Identifier\n PackageOrTypeName . Identifier\nRun Code Online (Sandbox Code Playgroud)\n这显然导致了一系列点分隔的标识符,没有任何类型参数。始终如一地javac拒绝像permits ChildA<?>, ChildB<?>.
换句话说,Eclipse 不应在此处生成警告,更重要的是,不应在permit子句中接受参数化类型。最好的选择是等待 Eclipse\xe2\x80\x99s Java\xc2\xa017 支持的修复。@SuppressWarnings("rawtypes")您可以向整个类添加 aParent以使警告消失,但由于这会影响整个类,因此我不建议这样做。
| 归档时间: |
|
| 查看次数: |
1308 次 |
| 最近记录: |