我为外部客户端提供了使用 RMI 执行方法的方法。我无法将变量 Naming
返回到 servidor.getNombreRegistrado()
返回的 String
中定义的类型。我正在构建一个代理,服务器可以在其中将自身及其服务注册到代理中,以便客户端可以访问它们。这就是为什么我需要将 Naming.lookup 的结果转换为服务器注册的类型。这样我就能够使用 RMI 调用其方法。
public String ejecutar_servicio(String nom_servicio, Vector<String> parametros_servicio) throws RemoteException{
try {
for(Servidor servidor : servidores){
for(Servicio servicio : servidor.getServicios()){
if(servicio.getNombre().equals(nom_servicio) && parametros_servicio.size() == servicio.numParametros()){
try{
Object server = (Object) Naming.lookup("//" + servidor.getHostname() + "/" + servidor.getNombreRegistrado());
server = (servidor.getNombreRegistrado()) server;
server.dar_fecha();
return "";
}catch(Exception ex){
System.out.println(ex);
return "Excepcion";
}
}
}
}
return "Servicio no encontrado";
}
catch (SecurityException ex) {
return ex.toString();
}
}
我怎样才能实现这种行为?
这是服务器类:
private class Servidor{
private String hostname;
private String nombreRegistrado;
private List<Servicio> servicios = new ArrayList<>();
public Servidor(String hostname, String nombreRegistrado){
this.hostname = hostname;
this.nombreRegistrado = nombreRegistrado;
}
void registrarServicio(Servicio servicio){
servicios.add(servicio);
}
String getNombreRegistrado() {
return nombreRegistrado;
}
List<Servicio> getServicios(){
return servicios;
}
String getHostname(){
return hostname;
}
}
这是 Servicio 类:
private class Servicio{
private String nombreServicio;
private Vector listaParametros;
private String tipoRetorno;
public Servicio(String nombreServicio, Vector<String> listaParametros, String tipoRetorno){
this.nombreServicio = nombreServicio;
this.listaParametros = listaParametros;
this.tipoRetorno = tipoRetorno;
}
public String getNombre(){
return this.nombreServicio;
}
public int numParametros(){
return this.listaParametros.size();
}
public String getTipoRetorno(){
return this.tipoRetorno;
}
}
最佳答案
这里:
server = (servidor.getNombreRegistrado())
这在 Java 中根本不可能。强制转换首先是编译时的操作。您告诉编译器您知道某个对象具有特定类型。含义:您的想法是在运行时将对象动态转换为某些方法调用的结果,这没有任何意义。
该方法返回一个字符串,一个字符序列。字符串就是字符串。你不能把一个字符串变成其他任何东西。类似于:字符串“Ferrari”可能表示一辆著名的跑车,但它仍然只是一个字符串。你不能坐进“法拉利”然后开走。因为它是一根绳子,不是一辆车! (或汽车建模类的对象)
我认为对你来说真正的答案是退后一步。您尝试在这里做复杂的事情,但您缺乏非常基本的 Java 知识。看来你给自己的负担太大了。退后一步,学习几天基本的 Java。然后回来重新访问rmi。
关于java - 从字符串变量 Java 进行转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55983595/