Java 泛型编译错误:类型参数不在类型变量的范围内
这是我正在研究的对象模型的简化版本Java 泛型编译错误:类型参数不在类型变量的范围内,java,generics,Java,Generics,这是我正在研究的对象模型的简化版本 public class GenericsTest { public interface FooInterface { public void foo(); } public class Bar implements FooInterface { public void foo() {} } public interface GenericInterface <T> {
public class GenericsTest {
public interface FooInterface {
public void foo();
}
public class Bar implements FooInterface {
public void foo() {}
}
public interface GenericInterface <T> {
public T func1();
}
public class Service implements GenericInterface<Bar> {
@Override
public Bar func1() {
return null;
}
}
public class GenericBar <S extends GenericInterface<FooInterface>> {
public S s;
public GenericBar() {}
}
public static void main(String[] args) {
GenericBar<Service> serviceGenericBar; // <-- compilation error at this line
<... more code ...>
}
}
公共类泛型测试{
公共接口{
公开无效foo();
}
公共类栏实现了一个接口{
公共void foo(){}
}
公共接口通用接口{
公共T函数1();
}
公共类服务实现泛型接口{
@凌驾
公共酒吧1(){
返回null;
}
}
公共类通用条{
公共服务;
公共GenericBar(){}
}
公共静态void main(字符串[]args){
GenericBar服务GenericBar;//当您更改服务以实现GenericInterface时,代码将编译
public class Service implements GenericInterface<FooInterface> {
@Override
public Bar func1() {
return null;
}
}
公共类服务实现泛型接口{
@凌驾
公共酒吧1(){
返回null;
}
}
或者,如果您希望将服务限制为仅基于Bar,您可以更改GenericBar,使其变得更通用:
public class Service implements GenericInterface<Bar> {
@Override
public Bar func1() {
return null;
}
}
public class GenericBar<S extends GenericInterface<? extends FooInterface>> {
public S s;
public GenericBar() {
}
}
公共类服务实现泛型接口{
@凌驾
公共酒吧1(){
返回null;
}
}
公共类GenericBar当您更改服务以实现GenericInterface时,代码将编译
public class Service implements GenericInterface<FooInterface> {
@Override
public Bar func1() {
return null;
}
}
公共类服务实现泛型接口{
@凌驾
公共酒吧1(){
返回null;
}
}
或者,如果您希望将服务限制为仅基于Bar,您可以更改GenericBar,使其变得更通用:
public class Service implements GenericInterface<Bar> {
@Override
public Bar func1() {
return null;
}
}
public class GenericBar<S extends GenericInterface<? extends FooInterface>> {
public S s;
public GenericBar() {
}
}
公共类服务实现泛型接口{
@凌驾
公共酒吧1(){
返回null;
}
}
公共类GenericBar问题正是两个编译器告诉您的:typeService
不在typeGenericBar
对其类型参数S
所要求的范围内。具体地说,GenericBar
要求将其实现的S
参数绑定到扩展的类型<代码>通用接口
服务
不满足该要求
服务
实现了通用接口
,它既不是通用接口
也不是该类型的扩展,Bar
实现了FooInterface
。出于基本相同的原因,您也不能将列表
分配给列表
类型的变量
您可以通过修改classGenericBar
的定义来解决编译错误,如下所示:
public class GenericBar <S extends GenericInterface<? extends FooInterface>> {
public S s;
public GenericBar() {}
}
public-class-GenericBar问题正是两个编译器告诉您的:typeService
不在typeGenericBar
对其类型参数S
所要求的范围内。具体地说,GenericBar
要求将其实现的S
参数绑定到趋向于通用接口
服务
不满足该要求
服务
实现了通用接口
,它既不是通用接口
也不是该类型的扩展,Bar
实现了FooInterface
。出于基本相同的原因,您也不能将列表
分配给列表
类型的变量
您可以通过修改classGenericBar
的定义来解决编译错误,如下所示:
public class GenericBar <S extends GenericInterface<? extends FooInterface>> {
public S s;
public GenericBar() {}
}
公共类GenericBar共享GenericBar实现共享GenericBar实现是的,我需要服务
类只负责条码
类型。感谢您的解释。是的,我需要服务
类只负责条码
类型。感谢您的解释。