在Java中检查一个字符串是否是一个类的实例

3
我希望能够知道如何在服务器Socket程序的服务器端检查一个字符串是否是某个类的实例。一个客户端提供了一个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){...}

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

1
如果是Java(或任何其他语言),您应该将标签添加到标签列表中。您可以编辑您的帖子进行此操作。 - hivert
4
不确定字符串怎么可能是除了字符串以外的任何东西的实例。也许是因为语言规范所以我漏掉了什么? - deceze
是的,抱歉。它是Java。 - user3403572
你的意思是检查一个对象是否是给定类的实例吗?如果不是,那么你的问题听起来不正确;你可能想要了解更多关于 Java 中的类。 - Eenvincible
我的错误在于我无法确定一个字符串是否为Class的实例。我必须这样做:ObjectInputStream object_input = new ObjectInputStream(sock.getInputStream()); Onject obj= object_input.readLine(); if (obj instanceof MyClass1){...} else if(obj instanceof MyClass2){...} - user3403572
我认为你正在寻找类似于 if string == 'MyClass1' 的东西。 - Tony Hopkinson
3个回答

1
您遇到这个错误是因为代码不合逻辑,编译器知道String string是一个字符串,那是肯定的,所以它防止您尝试对一个字符串进行实例InstanceOf操作,字符串是final类型且不实现Cloneable接口。您可以在此处查看更多信息。

1
将您的代码重写如下:
ObjectInputStream objectInput = new ObjectInputStream(sock.getInputStream());

        Object objectFromClient = objectInput.readObject();

        if (objectFromClient instanceof MyClass1) {

        } else if (objectFromClient instanceof MyClass2) {

        }// etc..

0

如果您想检查给定字符串(例如:"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方法


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接