通用变量类型参数

Aar*_*ang 10 java generics syntax variadic-functions

我想做点什么

public interface Foo<R, P...> {
    public R bar(P...) {/*misc*/}
}
Run Code Online (Sandbox Code Playgroud)

获取要在绑定实现中使用的类型数组.这在Java中可行吗?

Varargs旨在让我拥有给定类的任意数量的参数.

我想使用它(或类似的东西)让我的方法接受几个参数,每个参数都是给定不同类的成员.绑定泛型时定义这些类.

我知道有解决方法,但有一种类型安全的方法吗?

Col*_*inD 7

既然你显然希望能够bar采用不同类型的多个参数(使用varargs ),我建议改为使用单个参数.然后,您可以将该单个参数设置为容纳您要使用的每个"参数"的容器.

通常,最好为要使用此方法的每组参数创建一个类,以便为其包含的每个对象创建良好的名称.但是,您也可以执行诸如创建一系列元组类型(例如Pair)以用作持有者之类的操作.

这是一个例子:

public class Foo<R, P> {
  /*
   * Not sure how you intend to provide any kind of implementation
   * here since you don't know what R or P are.
   */
  public R bar(P parameters) { ... }
}

public class SomeFoo extends Foo<SomeResult, Pair<Baz, Bar>> {
  public SomeResult bar(Pair<Baz, Bar> parameters) { ... }
}

SomeFoo foo = ...
SomeResult result = foo.bar(Pair.of(baz, bar));
Run Code Online (Sandbox Code Playgroud)

  • 一般情况下,我会避免使用元组类型(它们在JDK中不存在,因为它们因各种原因而无法正常工作)并创建真正的类,为每个包含的对象提供有用的名称.我大多刚刚提到过,因为它接近你似乎要求的东西,因为它是你的选择.简短的回答是,如果要对任意类型的任意数量的对象进行分组,则可以使用类.你可以创建一个非常小而简单的类,并使它基本上充当结构. (2认同)