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

问题描述 投票:0回答:1

我正在尝试构建(在 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

我的理解是 Java/JDK 1.7 不支持 lambda 表达式,所以 Eclipse(或 Maven)似乎认为编译器是 1.8,但我已经完成了 Eclipse 配置,所有内容似乎都配置为使用 JDK 1.8,所以我不知道为什么我仍然收到错误,所以我想知道:是否可以转换该行,使其不再是 lambda 表达式?

这里有人可以帮忙吗?

编辑:抱歉,我必须更正上面错误的文本...正确的错误消息是

1.7
而不是
7

java eclipse lambda functional-interface apache-httpcomponents
1个回答
0
投票

假设您使用最新版本的 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

© www.soinside.com 2019 - 2024. All rights reserved.