检查字符串是否是Java中Class的实例

时间:2014-03-29 18:05:21

标签: java instanceof

我想知道如何检查字符串是否是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){...}

出错,我不知道如何解决。拜托,帮帮我

3 个答案:

答案 0 :(得分:1)

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

您可以查看有关此here

的更多信息

答案 1 :(得分:1)

重写您的代码如下:

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

        Object objectFromClient = objectInput.readObject();

        if (objectFromClient instanceof MyClass1) {

        } else if (objectFromClient instanceof MyClass2) {

        }// etc..

答案 2 :(得分: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方法