首先,我有一个简单的模板,没什么特别的:
public abstract class ListOfK<K> {
private List<K> insides = new ArrayList<>();
}
接下来,我将使用模板创建服务接口
public abstract interface SomeService<K extends ListOfK<K>> {
int calculateSomething (K input);
int calculateAnother (ListOfK<K> list);
}
到目前为止,抽象很好。
现在,让我们开始实施
public class ListOfString extends ListOfK<String> {
}
和 SomeService 的实现:
public class SomeServiceImpl extends SomeService<String> {
@Override
public int calculateSomething(String input) {
return 0; // TODO impl
}
@Override
public int calculateAnother(ListOfK listOfK) {
return 0; // TODO impl
}
}
不知何故,当SomeServiceImpl
extends 时SomeService<String>
,它标志着Type parameter java.lang.String is not within its bound; should extend ListOfK<String>
我应该输入什么作为实现,SomeService
以便它不会出错?还是我在 SomeService 上犯了错误?我只想要一个输入是使用泛型的另一个类的类。
提前致谢。
这里的关键见解是,K
在ListOfK
类K
的上下文中与在SomeService
类的上下文中的类型不同。事实上,在你对 的定义中SomeService
,你是说它K
本身需要是一个ListOfK
,我怀疑这是你的问题。
calculateSomething
需要采用(1)单个值,或(2)一个ListOfK
值?calculateAnother
需要采取(1)ListOfK
的值,或(2)ListOfK
的ListOfK
值?我认为您想要选项 1,但您实际上选择了选项 2。
要解决此问题,请不要限制K
在SomeService
:
public interface SomeService<K> {
int calculateSomething(K input);
int calculateAnother(ListOfK<K> list);
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句