Сериализация с использованием дженериков
Ниже приведен фрагмент кода для сериализации объектов, но с использованием обобщений. Когда я выполнил этот метод, файл.ser не был создан. Я уверен, что мне не хватает некоторой важной концепции дженериков здесь. Пожалуйста, помогите мне!
public <T> void saveToDisk(List<T> objectlist) {
// TODO Auto-generated method stub
System.out.println(path);
if ("domain_pojo.Customer".equals(objectlist.getClass().getName()))
file = "/customer.ser";
else if ("domain_pojo.Employees"
.equals(objectlist.getClass().getName()))
file = "/employee.ser";
else if ("domain_pojo.Orders".equals(objectlist.getClass().getName()))
file = "/order.ser";
try {
FileOutputStream fos = new FileOutputStream(path + file);
// Create ObjectOutputStream to write object
ObjectOutputStream objOutputStream = new ObjectOutputStream(fos);
// Write object to file
System.out.println("Size of objectlist is :" + objectlist.size());
// objectlist.add(null);
for (T obj : objectlist) {
objOutputStream.writeObject(obj);
objOutputStream.reset();
}
objOutputStream.close();
} catch (IOException e) {
new FileParsingException(e, e.getMessage());
}
}
1 ответ
Решение
if ("domain_pojo.Customer".equals(objectlist.getClass().getName()))
Эта строка всегда ложна (и случай такой же, как и для других блоков IF) как значение objectlist.getClass()
всегда будет java.util.List.
Вы должны вместо этого пройти Class<T> clazz
и использовать это в сравнении.
С другой стороны, было бы лучше, если бы класс реализовал некоторый интерфейсный метод, который возвращает имя файла, вместо жесткого кодирования, подобного этому.