1

我正在尝试编写一个将 MyInterface 的任何子类作为参数的方法,但会出现语法错误。

public Map<String, List<T extends MyInterface>> makeMap(List<T extends MyInterface>) {

  Map<String, List<T extends MyInterface>> myMap = ...

  return myMap;

}

此语法无效。签名给出错误“错位构造”。但是,我的想法是我可以传递 MyInterface inn 的任何子类代替 T。这可以在 Java 中完成吗?如何?

4

2 回答 2

6

您混淆了声明泛型类型和引用该泛型类型的概念。假设您希望该方法是泛型的,请在返回类型之前声明泛型类型参数,然后像T其他地方一样简单地引用它:

//      Declaration                            ref              ref
public <T extends MyInterface> Map<String, List<T>> makeMap(List<T>) {
  //              ref
  Map<String, List<T>> myMap = ...

  return myMap;

}
于 2013-04-09T19:55:40.943 回答
3
public <T extends MyInterface> Map<String, List<T>> makeMap(List<T> myList) {

更多关于泛型方法here

我还注意到,在您的原始方法声明中,您没有为方法参数定义变量。

于 2013-04-09T19:54:25.357 回答