eclipse 如何将Java代码转换为非lambda表达式?

exdqitrt  于 2023-10-18  发布在  Eclipse
关注(0)|答案(1)|浏览(186)

我试图构建(在Eclipse中)并使用这个旧线程中的代码:
如何通过HTTP客户端传递客户端证书?
但我在编译它时遇到了问题,因为这一行导致编译器标记错误:

SSLContext sslContext = SSLContexts.custom().loadKeyMaterial(
    MutualHttpsMain.class.getResource(TEST_CLIENT_KEYSTORE_RESOURCE),
    storePassword, 
    keyPassword,
    (aliases, socket) -> aliases.keySet().iterator().next()
).build();

错误是:

error: lambda expressions are not supported in -source 1.7

我的理解是,lambda表达式在Java/JDK 1.7中不支持,所以看起来Eclipse(或Maven)认为编译器是1.8,但我已经通过我的Eclipse配置,一切似乎都配置为使用JDK 1.8,所以我不知道为什么我仍然得到错误,所以我想知道:有没有可能将这一行转换为不再是lambda表达式?
有人能帮忙吗?
编辑:对不起,我不得不纠正上面的错误文本.正确的错误消息是1.7而不是7

moiiocjp

moiiocjp1#

您不能使用Java 7编译器编译Java 8功能(lambda表达式、方法引用)。
假设你使用Apache HttpCore 4.4.16最新版本的方法,只需要实现一个匿名类PrivateKeyStrategy的示例:

SSLContext sslContext = SSLContexts.custom().loadKeyMaterial(
    MutualHttpsMain.class.getResource(TEST_CLIENT_KEYSTORE_RESOURCE),
    storePassword,
    keyPassword,
    new PrivateKeyStrategy() {
        @Override
        public String chooseAlias(Map<String, PrivateKeyDetails> aliases, Socket socket) {
            return aliases.keySet().iterator().next();
        }
    }
).build();

建议使用说明:如果您使用已弃用的Apache HttpClient org.apache.http.conn.ssl.SSLContextBuilder,请考虑迁移到Apache HttpCore org.apache.http.ssl.SSLContextBuilder

相关问题