泛型方法返回类型参数的超类型和方法参数类型参数

时间:2013-03-20 22:14:15

标签: java generics

我希望返回类型参数是类型参数和方法参数类型参数的超级。

编译:

import java.util.List;
interface Foo<A> {
    <R, B extends R> List<R> eg1(List<B> unit);
    <R> List<R> eg2(List<? extends R> unit);
}

但它并没有强制R也必须是A的超级。我该怎么做?

实际上,我想做的事情就像这些:

<B, R super A & B> List<R> func(List<B> unit);
<B> List<? super A & B> func(List<B> unit);

但是那些当然没有编译。

这有两个目的:

  1. 我希望能够将结果分配给A和B的任何超类。
  2. 在这个方法的实现中,我需要一个既可以包含A又可以包含B的结果类型。所以编译的第一个例子不起作用,因为它们不允许我在结果中加入A.

2 个答案:

答案 0 :(得分:1)

我认为您必须在类级别命名类型参数:

import java.util.List;
interface Foo<Base, A extends Base> {
    <B extends Base> List<Base> eg1(List<B> unit);
    <R> List<R> eg2(List<? extends R> unit);
}

答案 1 :(得分:0)

感谢@LouisWasserman的评论,我开始考虑我应该首先实现的实现。某处必须指定要构造的类型才能返回。在方法实现中硬编码,指定为类型参数,param类型参数等。无论在何种规范中,都可以正确地为此接口方法定义泛型。

换句话说,我试图做的事情毫无意义,因为你无法构造返回类型。