Java 在会话中使用lambda表达式
我正在编写一个Javafx应用程序,其中使用JavaMail发送电子邮件。创建新会话时,我使用语法Java 在会话中使用lambda表达式,java,lambda,jakarta-mail,java-8,Java,Lambda,Jakarta Mail,Java 8,我正在编写一个Javafx应用程序,其中使用JavaMail发送电子邮件。创建新会话时,我使用语法 Session session = Session.getInstance(props, //Use labmda expression? new javax.mail.Authenticator() { protected javax.mail.PasswordAuthentication
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不是一个功能接口 不,这里不能使用lambda。lambda只能用作功能接口(仅具有一个抽象方法的接口)实现的表示,但是
验证器
不是功能接口,因为
此外,我们也没有说lambdas可以用于任何SAM(单一抽象方法,如抽象类)类型,因为它只能用于SAM接口(函数接口)。除了解释为什么这里不能使用lambdas之外,请注意,您可能根本不需要验证。您可能需要包装身份验证器,并为除一个之外的方法实现默认实现。然后,您将拥有一个函数接口,您可以将其用于您的目的“但每当我使用它时,它抛出不兼容的类型,并说验证器不是函数接口”,如果
验证器不是(注意:只有一个抽象方法的抽象类不被视为函数接口),则否,你不能用lambda来实现它的方法。我也不相信你的语法是正确的。return语句周围需要括号。在语法方面,可以通过删除return
来避免括号。但是,是的,它只能被分配到一个功能接口,AFAIK。有趣的和所有的,但是传输。发送(消息,用户名,密码)
签名在哪里?当然在。这不是你寻找API文档的第一个地方吗?明白了!错过了关于这个主题的JavaMail部分。我在寻找普通的J2E传输