为什么不是';这个java接口定义是否使用编译器接受的泛型?
我想理解为什么编译器会抱怨这个接口声明。T是泛型类型参数为什么不是';这个java接口定义是否使用编译器接受的泛型?,java,generics,Java,Generics,我想理解为什么编译器会抱怨这个接口声明。T是泛型类型参数 static class Bar<T extends Comparable<?>> {} static interface Foo<T extends Comparable<?>, Bar<T>> { } 静态类栏,栏>{} 编译器说 错误:(64,53)Groovyc:意外标记: 我想要的是有一个接口Foo,它与包含任何扩展类的Bar实例一起工作 那么Bar应该是通用的,接
static class Bar<T extends Comparable<?>> {}
static interface Foo<T extends Comparable<?>, Bar<T>> { }
静态类栏,栏>{}
编译器说
错误:(64,53)Groovyc:意外标记:
我想要的是有一个接口Foo,它与包含任何扩展类的Bar实例一起工作
那么Bar应该是通用的,接口应该在T上参数化:
class Bar<T> {...}
interface Foo<T extends Comparable<?>> {
Bar<T> doSomething(Bar<T> otherBar);
...
}
类栏{…}
接口Foo,B扩展条>{
B剂量测定法(B其他巴);
}
从接口定义中删除条形图零件。这种语法只有在扩展或实现时才有意义。以下是一些例子:
static interface SuperFoo<T1, T2>{}
static interface SubFoo<T extends Comparable<?> > extends SuperFoo< T, Bar<T> >{}
静态接口超级库{}
静态接口子对象>{
公共空间把手(条形);
}
标识符static
在那里是不必要的,如果您的类被称为Foo
,那么您的接口肯定不能被称为Foo
(考虑到它们在相同的包中)。非常肯定在第一次使用时必须定义它(T扩展了Comparable
),那么你想达到什么目的呢?如果Bar是一个具体的类,为什么要将其声明为Foo接口的泛型类型?接口定义中不使用类Bar
。它被名为Bar的泛型类型参数隐藏
static interface SuperFoo<T1, T2>{}
static interface SubFoo<T extends Comparable<?> > extends SuperFoo< T, Bar<T> >{}
static interface Bar<F>{}
static interface Foo< T extends Comparable<?> > {
public void handle( Bar<T> bar );
}