ohw*_*ppp 6 java lambda java-8
我在替换这个特定的例子时遇到了问题:
Consumer consumer = new DefaultConsumer(channel) {
@Override
public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body)
throws IOException {
String message = new String(body, "UTF-8");
System.out.println(" [x] Received '" + message + "'");
}
};
Run Code Online (Sandbox Code Playgroud)
是否可以用lambda替换它,因为它使用DefaultConsumer的非默认构造函数?
它来自rabbitMQ java教程 - > LINK到全班
不,你不能.DefaultConsumer不是FunctionalInterface(并且不能:这里有更多信息)因此不是lambda目标.
说明:
答案是不.您可以为非final类和接口创建匿名类.lambda表达式不一样.这些只能用于需要SAM接口的地方,即只有单一抽象方法的接口(在Java 8之前,每个接口方法都是抽象的,但是因为Java 8接口也可以有默认和静态方法,因为它们有实现).
只有作为SAM接口实现的匿名类(如Runnable,ActionListener,Comparator,Predicate)可以替换为lambda表达式.DefaultConsumer不能是lambda目标,因为它甚至不是接口.
尽管Consumer是一个接口,但它不是SAM接口,因为它有多个抽象方法,因此它也不能成为lambda目标.
| 归档时间: |
|
| 查看次数: |
1335 次 |
| 最近记录: |