【发布时间】:2016-05-01 22:01:42
【问题描述】:
我有一个类,它在构造函数中有一个接口对象:
private Operator(/* ..., */ final Operation<?> operation) {
//...
}
操作是一个通用接口,只有一个方法:
@SuppressWarnings("unchecked")
public T applyOperation(T... arguments);
我现在可以像这样创建一个 Operator 类的对象:
public static final Operator POSTFIX_INCREASE = new Operator(/* ...,*/ new Operation<Integer>() {
@Override
public Integer applyOperation(Integer... arguments) {
return arguments[0]++;
}
});
但我想使用 lambda 表达式。这是 eclipse 本身推荐的(到目前为止看起来不错):
public static final Operator POSTFIX_INCREASE = new Operator("++", 0, 1, true, arguments -> arguments[0]++);
唯一的问题...它不起作用 :D 我当然知道,我需要提供类型信息:我需要 Operator 接口的整数实现。在匿名类中,我可以只提供默认方式,但在 lambda 表达式中,这是不可能的。有没有办法编写一个通用的 lambda 表达式,或者他们不支持吗? (这不会是什么大惊喜,因为泛型在 java 中不是很灵活)
【问题讨论】:
-
为
arguments提供显式类型 -
这是什么意思?接口中的变量参数应该是通用的。或者你的意思是在 lambda 表达式中调用参数?因为那时我想知道如何提供明确的参数
-
Java 不知道
arguments的类型是什么。它无法从任何地方推断出来。以(Integer... arguments) -> ...为例。 -
太好了,这正是我正在寻找的:D 我知道我需要显式提供类型,但我不知道我可以直接在 lambda 内部的参数上执行此操作.您可以将其发布为答案,以便我将其标记为已解决吗?