Java 泛型:如何扩展另一个泛型类的泛型类

尤利安娜

首先,我有一个简单的模板,没什么特别的:

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
  }
}

不知何故,当SomeServiceImplextends 时SomeService<String>,它标志着Type parameter java.lang.String is not within its bound; should extend ListOfK<String>

我应该输入什么作为实现,SomeService以便它不会出错?还是我在 SomeService 上犯了错误?我只想要一个输入是使用泛型的另一个类的类。

提前致谢。

丹尼尔·普莱登

这里的关键见解是,KListOfKK的上下文中与在SomeService的上下文中的类型不同。事实上,在你对 的定义中SomeService,你是说它K本身需要是一个ListOfK,我怀疑这是你的问题。

  • 是否calculateSomething需要采用(1)单个值,或(2)一个ListOfK值?
  • 是否calculateAnother需要采取(1)ListOfK的值,或(2)ListOfKListOfK值?

我认为您想要选项 1,但您实际上选择了选项 2。

要解决此问题,请不要限制KSomeService

public interface SomeService<K> {
    int calculateSomething(K input);
    int calculateAnother(ListOfK<K> list);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章