【发布时间】:2018-05-12 08:18:05
【问题描述】:
我正在寻找满足以下两个要求的功能接口:
- 应该接受并返回相同的类型
- 应在调用 FunctionalInterface 上的方法时推断类型
如果需求只是第一个,我可以创建一个简单的FunctionalInterface,如下所示:
@FunctionalInterface
public interface MonoFunction<T> {
T apply (T arg);
}
但是,这需要在使用接口时指定类型。但是,我希望推断类型。类似于下面的伪代码:
class A {
int a;
}
class B {
int b;
}
public static void main (String[] args) {
A a;
B b;
MonoFunction foo = (obj) -> {
system.out.println (obj)
return obj;
};
a = foo.apply (new A());
b = foo.apply (new B());
}
我如何实现这样的目标?
【问题讨论】:
-
Java 泛型不是这样工作的。您必须在变量声明中指定类型的泛型参数。
-
@Hashken 您是否愿意:(1) 在定义函数时声明类型(例如,
MonoFunction<A> foo = ...)但在应用它时不声明,或者(2)失去类型安全性(例如,ClassCastException不当使用MonoFunction时会抛出)?我想我可以去工作。 -
您正在寻找
UnaryOperator<T>扩展Function<T, T>但我不确定您为什么希望自动推断类型。这行不通。 -
@pkpnd:如何实施选项 2(丢失类型安全)?
标签: java function lambda functional-interface