2013-02-11 2 views
0

Должен ли объект возврата метода RemoteObject быть сериализуемым? Например, А представляет собой удаленный объект и имеет функцию:Значение метода метода RemoteObject

SomeObject getMyObject() throws java.rmi.RemoteException 

делает SomeObject должны быть сериализуемыми?

ответ

3

Хорошо по документации должно быть:

2,6 Параметр Переходя в удаленного вызова метода

Аргументом, или значение возврата из, удаленный объект может быть любой объект, который сериализуется. Это включает в себя примитивных типов, дистанционного объекты и не-удаленных объектов, которые реализовать java.io.Serializable интерфейс. Подробнее о том, как сделать классы классов сериализуемыми, см. В разделе «Сериализация Java Object ». Классы для параметров или возвращаемых значений, которые не являются , доступны локально, динамически загружаются системой RMI. См. раздел «Загрузка динамического класса» для получения дополнительной информации о том, как RMI загружает классы параметров и возвращаемых значений при чтении параметров, Возвращает значения и исключения.

http://docs.oracle.com/javase/1.5.0/docs/guide/rmi/spec/rmi-objmodel7.html

И это имеет смысл. Объект должен передаваться с одного узла на другой. Чтобы быть переданным, он должен быть помещен в сокет (в какой-то момент), поэтому он должен быть сериализован.

+0

Включает ли примитивные типы? Я имею в виду, действительно ли примитивные типы реализуют java.io.serializable? – TheNotMe

+0

Примитивные типы сериализуемы, поскольку JVM знает, как их преобразовать в поток бит, но они не могут реализовать какой-либо интерфейс, поскольку они не являются объектами. – user000001

+0

Обратите внимание, что в цитате не сказано, что она должна быть Serializable. В нем говорится, что это должен быть «любой объект, который * сериализуем». Это не то же самое, что и цитата. – EJP

1

Это должен быть либо примитивный тип, либо тип Serializable, либо сам экспортированный удаленный объект. В последнем случае он автоматически преобразуется в Stub. Registry.lookup() - пример.