1

我目前正在为我的代码库开发一个序列化类。这是为了避免一遍又一遍地编写相同的代码。

因为这是我的代码库的一部分,所以我永远不知道我正在反序列化什么样的对象类。我想知道任何人都可以更新我的代码以使返回值成为我在方法变量中提供的那种类。希望这是有道理的:)

public static Object deserializeObject(File serializedFile) {
    Object returnObject;
    if (!serializedFile.exists() || !serializedFile.canRead()) {
        return null;
    }
    try {
        //use buffering
        InputStream file = new FileInputStream(serializedFile);
        InputStream buffer = new BufferedInputStream(file);
        ObjectInput input = new ObjectInputStream(buffer);
        try {
            //deserialize the List
            returnObject = input.readObject();
        } finally {
            input.close();
        }
    } catch (ClassNotFoundException ex) {
        ex.printStackTrace();
        return null;
    } catch (IOException ex) {
        ex.printStackTrace();
        return null;
    }

    return returnObject;
}
4

3 回答 3

1

您可以像这样声明该方法:

public static <T> T deserializeObject(File serializedFile, Class<T> type) {
    ...
    return (T) returnObject; // Or return type.cast(returnObject);
}

当您调用该方法时,您可以使用

MyObj myObj = deserializeObject(file, MyObj.class);
于 2012-12-25T22:53:55.567 回答
0

是否要返回反序列化对象的类?如果是这样,你可以这样做

return returnObject.getClass().getName();
于 2012-12-25T22:29:07.140 回答
0

您可以使用 instanceof 检查来查看您传入的对象类型,然后根据这种情况将其设置为适当的类型。

  public static void doSomething(Animal aAnimal){
    if (aAnimal instanceof Fish){
      Fish fish = (Fish)aAnimal;
      fish.swim();
    }
    else if (aAnimal instanceof Spider){
      Spider spider = (Spider)aAnimal;
      spider.crawl();
    }
  }

您还可以添加另一个参数作为方法的输入,并传入要反序列化的对象类。通常我会把它命名为 Class clazz。

public static Object deserializeObject(Class clazz, File serializedFile)

如果您传入类的类型,则可以使用该值强制转换您的对象。

于 2012-12-25T22:59:31.790 回答