Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在会话中使用lambda表达式_Java_Lambda_Jakarta Mail_Java 8 - Fatal编程技术网

Java 在会话中使用lambda表达式

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

我正在编写一个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不是一个功能接口

不,这里不能使用lambda。lambda只能用作功能接口(仅具有一个抽象方法的接口)实现的表示,但是
验证器
不是功能接口,因为

  • 它没有一个lambda应该实现的抽象方法(实际上它没有任何抽象方法)
  • 它是(抽象,但仍然是类)而不是接口
  • 因此,lambdas再一次只能用于具有一个抽象方法的接口。通过这种方式,lambda知道它实现了哪个方法(知道它的签名,这样它就知道所需参数的数量、它们的类型或预期返回值(如果有)。

    此外,我们也没有说lambdas可以用于任何SAM(单一抽象方法,如抽象类)类型,因为它只能用于SAM接口(函数接口)。

    除了解释为什么这里不能使用lambdas之外,请注意,您可能根本不需要验证。

    您可能需要包装身份验证器,并为除一个之外的方法实现默认实现。然后,您将拥有一个函数接口,您可以将其用于您的目的“但每当我使用它时,它抛出不兼容的类型,并说验证器不是函数接口”,如果
    验证器不是(注意:只有一个抽象方法的抽象类不被视为函数接口),则否,你不能用lambda来实现它的方法。我也不相信你的语法是正确的。return语句周围需要括号。在语法方面,可以通过删除
    return
    来避免括号。但是,是的,它只能被分配到一个功能接口,AFAIK。有趣的和所有的,但是
    传输。发送(消息,用户名,密码)
    签名在哪里?当然在。这不是你寻找API文档的第一个地方吗?明白了!错过了关于这个主题的JavaMail部分。我在寻找普通的J2E传输