我有三种类型,A
、B
和C
,它们的定义如下:
public sealed interface A extends Comparable<A> permits B<?>, C { ...
public non-sealed interface B<T> extends A { ...
public record C(String s, int i) implements A { ...
在Eclipse中一切都能正常编译和运行。现在,当我运行gradle构建时,我在permits B<?>
的左括号处得到一个错误error: '{' expected
。当我删除<?>
时,类型定义如下所示(原始类型):
public sealed interface A extends Comparable<A> permits B, C { ...
...那么gradle没有抱怨,并且构建成功。这是gradle错误还是我使用的类型定义不被允许?
1条答案
按热度按时间oknrviil1#
根据Java语言规范§8.1.6,
permits
类型列表中的项必须没有它们的类型参数。因此,
permits B<?>
不正确,必须将更正为permits B
。请确定
permits B<?>
不会给予编译错误,而permits B<?>
会产生B is a raw type. References to generic type B<T> should be parameterized
警告,has been reported to Eclipse JDT。