java - 具有可变输入和一个输出的 Guava 函数

标签 java generics types guava

我一直在使用Guava Function接口(interface)public interface Function<F, T>虽然它对f(F)=T很有用类型计算。我遇到过很多需要计算变量参数的情况,即

f(A,B,C...)=X

现在我最近遇到了java元组库http://www.javatuples.org/它可以很好地完成最多 10 个参数的工作。然而我想要一些更通用的东西。而不是为各个类显式声明 getter 和 setter。我的问题是,是否可以声明这样的内容

public interface Function2<Class<? extends Object>...,T>

它可以对可变数量的类型参数进行操作。虽然我知道拥有一个类并使用其相应的字段是一个更好的选择,但我只是想知道这一点。

编辑

当询问此类函数的用例时,我正在撰写关于 Function Java 库(最多支持 8 个参数)的此类使用,尽管它是一个非常微不足道的用例。 例如:给定 2 个字符串,如果它们相等则返回 true,否则返回 false:

 F2<String, String, Boolean> stringsEqual = new F2<String, String, Boolean>() {
 @Override
 public Boolean f(final String a, final String b) {
 return a.equals(b);
 }

最佳答案

不,您不能在泛型中使用可变参数。

但是,您可以遵循的一种可能的方法是使用包含所有函数参数的列表:

public interface Function2<T extends List<?>, U> {
     public U apply(T argumentList);
}

另一种方法是在抽象方法中定义可变参数,但在泛型上下文中,它们应该是兼容的类型(因为我们不能定义无限数量的没有关系的类型参数)。例如:

public interface Function2<T, U> {
     public U apply(T ... argumentList);
}

关于java - 具有可变输入和一个输出的 Guava 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28298945/

相关文章:

types - 内置类型上的OCaml模式匹配

java - 字符集

java - Toast 消息不显示?

ios - 如何在 Swift 中简化几乎相等的枚举扩展

python - 在使用 `types.new_class` 创建的类上设置模块

java - 在 Java 中类型转换为字节

java - 是否有一个 RDD 变换函数可以查看相邻元素?

java - 如何强制实例化静态字段

java - 泛型,设置 ArrayList<?将 Option> 扩展到 ArrayList<OptionChild>

c# - 泛型类与泛型方法