java - 从字符串变量 Java 进行转换

标签 java casting runtime rmi rpc

我为外部客户端提供了使用 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/

相关文章:

java - 第 2 轮 : keeping components preferred sizes in border layout, 带有滚动和选项卡式 Pane

java - CPU 使用率

casting - Swift Double 不能转换为 CGFloat

java - "NoDefClassNotFound"和 "T cannot not be resolved to a type",在运行时

java - 如何在 Java 中漂亮地打印无效/不完整的 JSON

java - 已签名的 Java 小程序突然出现混合代码警告

c++ - C->C++ 在未给出类型的情况下,在#define 中自动将 void 指针转换为 C++ 中的类型指针(C 风格)[MSVS]

Java - 转换为未知类型

c++ - 如果繁重的计算函数位于循环的条件部分,运行时间是否会有所不同?

performance - 加速嵌套循环;可以向量化吗?