Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么不是';这个java接口定义是否使用编译器接受的泛型?_Java_Generics - Fatal编程技术网

为什么不是';这个java接口定义是否使用编译器接受的泛型?

为什么不是';这个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应该是通用的,接

我想理解为什么编译器会抱怨这个接口声明。T是泛型类型参数

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 );

}