Я реализую транспортный протокол Positive Acknowledgment and Retransmission с точки зрения сокетов RAW, и в таких случаях необходим подкласс SocketImpl
. При реализации accept
method мне нужно что-то вроде этого:
protected void accept(SocketImpl s) {
...
s.copy(socket);
}
где socket
– это уже вычисленный объект SocketImpl
, который необходимо скопировать в уже инициализированный объект SocketImpl
s
. . Я знаю, что существует Object clone()
, но он возвращает новый объект, и мне нужно изменить s
.
Кстати, некоторые из вас думают, что изменение параметра, в данном случае s
, является неправильным дизайном. Это не единственный пример в стандартных библиотеках Java. implAccept(Socket s)
класса ServerSocket
— еще один пример. Но именно так это спроектировали инженеры Sun/Oracle. Я хотел бы знать, почему это такой плохой дизайн
На первый взгляд может показаться, что есть смысл предусмотреть общее мелкое target.copy(source)
, где target = souce.clone()
будет эквивалентно target = new TheClass(); target.copy(source)
; но поскольку его не существует (возможно, по уважительной причине, пожалуйста, объясните), единственный выход — запрограммировать собственный метод копирования полей.
Я прав? Спасибо.
SocketImpl
(или любого другого сокета, если на то пошло) довольно необычная вещь. - person Victor Sorokin   schedule 26.10.2012clone
или copy — это не то, что вы должны делать в Java. Для таких вещей есть ядро ОС. - person Victor Sorokin   schedule 26.10.2012