2013-12-03 3 views
1

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

Где заявлен «файл» и какое значение оно имеет, если не удается выполнить все три условия? – AgilePro

ответ

2

если ("domain_pojo.Customer" .equals (objectlist.getClass(). GetName()))

Эта линия всегда ложно (и так же с другой еще IF блоки), так как значение objectlist.getClass() всегда будет java.util.List.

Вам следует вместо этого передать Class<T> clazz и использовать его для сравнения.

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

+2

+1, но может быть лучше, если вы упомянули «Type Erasure» вслух;) – kem

 Смежные вопросы

  • Нет связанных вопросов^_^