我有三种类型,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 构建时,出现错误 error: '{' expected
在 permits B<?>
的左括号位置。当我删除<?>
时,这样类型定义如下(原始类型):
public sealed interface A extends Comparable<A> permits B, C { ...
...然后 gradle 不会提示并且构建成功。这是 gradle bug 还是我使用的类型定义不允许?
最佳答案
根据Java Language Specification §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 .
关于Java密封接口(interface)允许泛型类型: gradle complains, eclipse不允许,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73443052/