泛型类定义中的可变长度类型参数

时间:2016-03-13 14:33:31

标签: java generics

是否可以在类定义中添加可变数量的通用参数?

例如:

public class Test<E,T,U...>

构建对象实例时要定义的通用参数的确切数量。

3 个答案:

答案 0 :(得分:0)

不,不可能,您可以做的是:

在构造函数

中定义通用BUT允许varargs
public class Deyen<T, G, M> {

    private final T typo;
    private final G typo22;
    private final M[] typo3;

    public Deyen(T typo, G typo22, M... typo3) {
        this.typo = typo;
        this.typo22 = typo22;
        this.typo3 = typo3;
    }
}

在定义类本身时显式定义vararg并没有提出编译器......

答案 1 :(得分:0)

显然,您希望能够以varargs的形式使Test获取不同类型的多个参数。

VarArgs实际上是作为一个数组传递的,但你不能拥有一个包含不同类型对象的数组。

但是,我们不能采用单个参数,并且该参数类型包含每个单独的&#34;参数&#34;需要使用。

class TypedInstance<T>{
   Class<T> type;
   T instance;
}

或者

您要使用的每组参数的不同类。然后将该类作为参数传递。

 class MultiTypedInstanceType1<T, R>{
    public R doSomething(T t){ .... }
}

 class MultiTypedInstanceType2<T, R, P>{
    public R doSomething(T t, P p){ .... }
}

答案 2 :(得分:0)

在java中似乎不可能定义签名类型的重载,但在C#中可能可能是因为类型扩展。也许这是一个选择......

class Test<A,B> { }
class Test<A> { }

public class Program
{
    public static void Main()
    {
        var one = new Test<string>();
        var two = new Test<string, int>();
    }
}

在这里,您重载类型Test的签名,以采用与方法重载相同的方式获取一个或两个类型参数。 Here is a fiddle for that

不幸的是,您必须为所有变体创建几种类型,而不是通过变量参数列表来定义它们。