我一直在使用Guava Function接口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>
可以对可变数量的类型参数进行操作。虽然我知道有一个课程并使用相应的字段是一个更好的选择,但我只想知道这一点。
由于要求提供此类函数的用例,我正在编写有关Functional 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);
}
答案 0 :(得分:2)
不,你不能在泛型中使用varargs。
但是,您可以遵循的一种可能方法是使用包含所有函数参数的列表:
public interface Function2<T extends List<?>, U> {
public U apply(T argumentList);
}
另一种方法是在抽象方法中定义varargs,但在泛型的上下文中,它们应该是兼容的类型(因为我们无法定义无限量的类型参数,它们之间没有关系)。例如:
public interface Function2<T, U> {
public U apply(T ... argumentList);
}