java - 是否可以将匿名对象作为 RMI 方法的参数传递?

标签 java rmi anonymous-class

我试图通过 RMI 调用一个远程方法,该方法采用 1 个 MyData 类型的参数,这是服务器端和客户端都已知的接口(interface)。

在我的客户端类MyClass中,我创建了一个MyData类型的匿名对象,并将其传递给远程方法,并得到了一个异常:

Caused by: java.lang.reflect.InvocationTargetException
    at wt.method.RemoteMethodServer.invoke(RemoteMethodServer.java:795)
    at 
    ... 2 more
Caused by: java.lang.ClassNotFoundException: MyClass$1 (no security manager: RMI class loader disabled)

问题:我必须使用接口(interface) MyData实现来传递 RMI 方法参数吗?该实现在服务器端和客户端都是已知的。

最佳答案

如果满足以下条件,就有可能:

  1. 该类已部署到对等方的 CLASSPATH,或通过代码库功能可用,
  2. 定义它的类是Serialized
  3. 您意识到并接受外部类实例将与匿名类一起发送,因为它是内部类并且具有对其外部类的引用,因此外部类也必须部署到对等体或通过代码库功能可用。

(2) 可能不正确,并且除此之外的任何原因可能不需要为正确,并且 (3) 很可能不正确,因为它很可能是一个仅与服务器无关的客户端类。

不要这样做。没有什么优点,还有几个缺点。使用外部类或静态类。

关于java - 是否可以将匿名对象作为 RMI 方法的参数传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28108706/

相关文章:

java - 使用 php 运行 java 类文件

java - 使用Java RMI时代码在哪里执行?

java - Java 中的安全通信 - 序列化密文对象与传输层加密与 SSL 上的 RMI

java - 为什么在 Java 中向匿名类添加公共(public)字段不起作用?

java - lambda 实际上是一个匿名类吗?

java - Hadoop 分布式缓存类路径

java - 从工作 DropDownChoice 和 SelectOption 的模型中获取值类型 Enum

java - 计算出现次数的最有效方法?

java - Java RMI 连接使用什么端口?

java - .Net 委托(delegate)相对于 Java 匿名类的真正优势是什么?