Внутренние классы
Нет, отправка объекта Actionscript с псевдонимом во внутренний класс Java (статический или другой) не поддерживается "из коробки".
Как вы уже виделипри десериализации пакета AMF имя класса интерпретируется как внешний класс, а не как внутренний класс.
Однако вы можете реализовать это самостоятельно, если ваши классы реализуют IExternalizable ,( См. Здесь для получения дополнительной информации )
Альтернативой IExternalizable
является использование подхода , подобного этому , который обеспечивает поддержку отправляемых Java Enum.через Flex.Они используют настраиваемую конечную точку десериализатора.
В интересах полноты следует отметить, что сериализация внутренних классов Actionscript поддерживается , однако метатег [RemoteClass]
- нет.Вместо этого внутренние классы должны быть явно зарегистрированы с использованием registerClassAlias
, обычно внутри статического метода внешнего класса.
Полиморфизм
Чтобы исправить точку в исходном сообщении:
.... Пример: полиморфизма нет.Нужно создавать методы с разными именами, так как методы с одинаковыми именами с разными параметрами создают конфликт.
Учитывая, что BlazeDS является продуктом на стороне сервера, я предполагаю, что вы имеете в видуспособ, которым BlazeDS обрабатывает полиморфизм и перегрузку в Java.В этом случае ваше утверждение неверно.
Например, допустим следующий код:
@RemotingDestination
public class EchoService {
public String echo(String source)
{
return "Received String";
}
public Object echo(Object source)
{
return "Recieved object of type " + source.getClass().getName();
}
Выполнено следующим образом:
remoteObject.echo("Hello") // result from service is "Received String"
remoteObject.echo(new Date()) // result from service is "Received object of type java.util.Date"
Однако этокак пример вашего вопроса, это не пример полиморфизма.Это перегрузка метода, которая отличается.
Полиморфизм поддерживается , как показано здесь:
// Java
// This method on EchoService
public String echo(Employee employee)
{
return employee.sayHello();
}
public class Employee {
public String sayHello() {
return "Hello, I'm an employee";
}
}
public class Manager extends Employee {
@Override
public String sayHello() {
return "Hello, I'm a Manager";
}
}
Выполняется следующим образом:
// In flex...
remoteObject.echo(new Employee()) // Recieves "Hello, I'm an employee"
remoteObject.echo(new Manager()) // Recieves "Hello, I'm a Manager"
Если мы удалим метод echo(Employee employee)
, то результат будет:
// In flex...
remoteObject.echo(new Employee()) // Recieves "Recieved object of type Employee"
remoteObject.echo(new Manager()) // Recieves "Recieved object of type Manager"