为什么SSLSocketFactory.createSocket返回Socket而不是SSLSocket?

时间:2013-08-14 08:32:57

标签: java jsse

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

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

这里显示一个明确的设计选择是返回Socket而不是SSLSocket,这意味着使用此方法的类不需要知道Socket是{ {1}}。

然而,如果我必须握手,我必须向下转发它,因为方法

SSLSocket

在SSLSocket类上定义。

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

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

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

  • 图书馆设计不佳。

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

1 个答案:

答案 0 :(得分:3)

因为createSocket方法是从SocketFactory继承的。覆盖结果类型是不可能的。

可能有一种方法可以使用泛型,但这会破坏现有API和所有现有代码。