我正在根据RAW套接字实现肯定确认和重传传输协议(protocol),在这种情况下,需要SocketImpl的子类。当实现accept方法时,我需要这样的东西:

protected void accept(SocketImpl s) {
    ...
    s.copy(socket);
}

其中socket是已计算出的SocketImpl对象,必须将其复制到已初始化的已初始化 SocketImpl对象s。即,我需要一种可变复制方法 s.copy(socket),它将源socket复制到目标s。我知道存在Object clone(),但是它返回一个新的Object,我需要对s进行突变。

顺便说一句,有些人认为突变一个参数(在这种情况下为s)是 splinter 的设计。这不是Java标准库中的唯一示例。 implAccept(Socket s)类的ServerSocket是另一个示例。但这就是Sun/Oracle工程师设计它的方式。我想知道为什么这是一个糟糕的设计

乍一看来,提供通用的浅层target.copy(source)似乎有些道理,其中target = souce.clone()等同于target = new TheClass(); target.copy(source);但是由于它不存在(可能出于充分的原因,请解释),唯一的方法是编程一个自定义的逐字段复制方法

我对吗?谢谢。

最佳答案

您误解了该方法的用途以及它的工作方式。我已经做了很多次了。提供给SocketImplimplAccept()是用于新接受的套接字,而不是ServerSocket。因此,您不需要第二份副本。您需要做的就是将此SocketImpl包装在Socket或您自己的Socket派生类中。奇怪的是,甚至提供了一个Socket构造函数。

10-07 21:45