gpt4 book ai didi

java - 为什么 SSLSocketFactory.createSocket 返回一个套接字而不是 SSLSocket?

转载 作者:行者123 更新时间:2023-11-29 05:39:21 25 4
gpt4 key购买 nike

在我的代码中,根据 boolean 标志,我应该决定是否与 SSL 套接字握手。我使用 SSLSocketFactory 创建套接字,这是从官方 Javadoc 获取的 createSocket 方法的签名。

abstract Socket createSocket(Socket s, String host, int port, boolean autoClose)

返回 Socket 而不是 SSLSocket 似乎是一个明确的设计选择,这意味着使用此方法的类不需要知道 Socket 是一个 SSLSocket

但是,如果我必须握手,我必须向下转换它,因为方法

  public abstract void startHandshake() throws java.io.IOException;

在 SSLSocket 类上定义。

SSLSocket socket = (SSLSocket) SSLSocketFactory.getDefault().createSocket( getApiServerAddress(), getPort() );

三个可能的答案中哪个是正确的?

  • 库中的这种设计模式表明您不应该直接调用 startHandShake(),而是调用 Socket 类上的某个方法,该方法将调用 startHandShake()。 Socket 类上的这个方法是什么?而且,如果是这种情况,为什么 startHandShake() 是公开的?

  • 图书馆设计不佳。

  • 我没有以正确的方式创建 SSLSocket。

最佳答案

因为createSocket方法继承自SocketFactory。无法覆盖结果类型。

可以使用泛型来解决它,但这会破坏现有的 API 和所有现有的代码。

关于java - 为什么 SSLSocketFactory.createSocket 返回一个套接字而不是 SSLSocket?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18226797/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com