【问题标题】:Check if a string is instance of a Class in Java [closed]检查字符串是否是Java中的类的实例[关闭]
【发布时间】:2014-03-29 18:05:20
【问题描述】:

我想知道如何在 ServerSocket 程序的服务器端检查一个字符串是否是一个类的实例。一个客户端给出一个 Myclass1 类的对象,服务器必须检查从客户端读取的字符串是 MyClass1 的实例还是另一个类(例如 MyClass2、String、Integer 等)

这是我的代码:

  ObjectInputStream object_input = new ObjectInputStream(sock.getInputStream());
  String string = object_input.readLine();
  if (string instanceof MyClass1){...}
  else if(string instanceof MyClass2){...}

它出错了,我不知道如何解决它。请帮帮我

【问题讨论】:

  • 如果是Java(或任何其他语言),您应该将标签添加到标签列表中。您可以为此编辑您的帖子。
  • 不确定字符串如何成为除字符串之外的任何内容的实例。也许我错过了一些东西,因为指定了语言..?
  • 是的,抱歉。这是java
  • 你的意思是检查一个对象是否是给定类的一个实例?如果不是,那么您的问题听起来不对;您可能想了解更多关于 Java 中的类
  • 我的错误是我可以找到一个 sting 是否是 instanceof 类。我必须这样做: ObjectInputStream object_input = new ObjectInputStream(sock.getInputStream()); Onject obj= object_input.readLine(); if (obj instanceof MyClass1){...} else if(obj instanceof MyClass2){...}

标签: java instanceof


【解决方案1】:

重写你的代码如下:

ObjectInputStream objectInput = new ObjectInputStream(sock.getInputStream());

        Object objectFromClient = objectInput.readObject();

        if (objectFromClient instanceof MyClass1) {

        } else if (objectFromClient instanceof MyClass2) {

        }// etc..

【讨论】:

    【解决方案2】:

    您收到该错误是因为该代码不合逻辑,编译器知道 String string 是一个字符串,这是肯定的,因此它会阻止您尝试执行字符串的 instanceOf,即 final 和没有实现Cloneable

    你可以看到更多关于这个here的信息

    【讨论】:

      【解决方案3】:

      如果您尝试检查给定字符串(例如:“java.lang.String”)是否代表类加载器中类的有效名称,您可以使用 Class.forName(className)。类似这个例子:

      public class Demo {
          public static void main(String[] args) {
      
              System.out.println(isInstance("java.lang.String")); // will print true
              System.out.println(isInstance("Longssss"));         // will print false 
      
          }
          public static boolean isInstance(String string) {
              try {
                  return Class.forName(string).getName().equals("java.lang.String");
              } catch (Exception e) {
                  return false;
              }
          }
      }
      

      您将不得不探索Class.forName 方法

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-10-24
        • 1970-01-01
        • 2019-05-02
        • 2013-05-07
        • 2022-06-14
        • 2018-09-22
        • 1970-01-01
        相关资源
        最近更新 更多