繁体   English   中英

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

[英]Variable length type parameters in generic class definition

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

例如:

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

以及在构建对象实例时要定义的泛型参数的确切数量。

不可以,您可以执行以下操作:

在构造函数中定义通用BUT allow 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不会带来编译器...

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

VarArgs实际上是作为数组传递的,但是您不能在其中包含具有不同类型对象的数组。

但是,我们不能取一个单独的参数,而该参数类型保存需要使用的每个单独的“参数”。

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){ .... }
}

在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类型的签名以采用一个或两个类型参数。 这是一个小提琴

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM