Сериализация с использованием дженериков

Ниже приведен фрагмент кода для сериализации объектов, но с использованием обобщений. Когда я выполнил этот метод, файл.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 и использовать это в сравнении.

С другой стороны, было бы лучше, если бы класс реализовал некоторый интерфейсный метод, который возвращает имя файла, вместо жесткого кодирования, подобного этому.

Другие вопросы по тегам