我想知道如何检查字符串是否是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){...}
出错,我不知道如何解决。拜托,帮帮我
答案 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方法