在根据布尔标志的代码中,我应该决定是否握手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。
答案 0 :(得分:3)
因为createSocket
方法是从SocketFactory
继承的。覆盖结果类型是不可能的。
可能有一种方法可以使用泛型,但这会破坏现有API和所有现有代码。