【发布时间】:2014-11-12 07:23:48
【问题描述】:
我正在编写一个 Javafx 应用程序,其中使用 JavaMail 发送电子邮件。创建新会话时,我使用语法。
Session session = Session.getInstance(props,
//Use labmda expression?
new javax.mail.Authenticator() {
protected javax.mail.PasswordAuthentication getPasswordAuthentication(){
return new javax.mail.PasswordAuthentication(userName, password);
}
}
);
我想知道是否可以使用 lambda 表达式来简化它,例如
() -> return new java.mail.PasswordAuthentiaction(userName, password)
但是每当我使用它时,它都会抛出不兼容的类型,并说 Authenticator 不是功能接口。
【问题讨论】:
-
您可能需要包装 Authenticator 并为除一个之外的方法实现默认实现。然后您将拥有一个功能界面,您可以将其用于您的目的
-
"但每当我使用它时,它会抛出不兼容的类型,并说 Authenticator 不是功能接口",如果
Authenticator不是 functional interface(注意:abstract只有一个抽象方法的类不被认为是功能性的接口)那么不,你不能使用 lambda 来实现它的方法。 -
我也不相信你的语法是正确的。您需要在您的退货声明周围加上括号。
-
就语法而言,可以通过删除
return来避免括号。但是,是的,它只能分配给功能接口,AFAIK。
标签: java lambda jakarta-mail java-8