1

Предположим serialise.bin файл, который полон слов и был ArrayList, когда он был сериализованнаядесериализуйте файл, затем сохраните содержимое в ArrayList <String>. (Java)

public static ArrayList<String> deserialise(){ 
    ArrayList<String> words= new ArrayList<String>(); 
    File serial = new File("serialise.bin"); 
    try(ObjectInputStream in = new ObjectInputStream(new FileInputStream(serial))){ 
     System.out.println(in.readObject()); //prints out the content 
    //I want to store the content in to an ArrayList<String> 
    }catch(Exception e){ 
     e.getMessage(); 
    } 
return words; 
} 

Я хочу, чтобы иметь возможность deserialise файл «serialise.bin» и хранить содержимое в ArrayList

+0

В чем ваш вопрос? Есть ли проблема с вашим кодом? – shmosel

+0

Не возвращайте 'ArrayList'. Вместо этого верните «Список», чтобы вызывающие «десериализа» не зависели от этой детали реализации. –

ответ

0

в ролях его ArrayList<String>, а in.readObject() же возвращает Object, и назначить его words:

@SuppressWarnings("unchecked") 
public static ArrayList<String> deserialise() { 

    // Do not create a new ArrayList, you get 
    // it from "readObject()", otherwise you just 
    // overwrite it. 
    ArrayList<String> words = null; 
    File serial = new File("serialise.bin"); 

    try (ObjectInputStream in = new ObjectInputStream(new FileInputStream(serial))) { 
     // Cast from "Object" to "ArrayList<String>", mandatory 
     words = (ArrayList<String>) in.readObject(); 
    } catch(Exception e) { 
     e.printStackTrace(); 
    } 

    return words; 
} 

аннотацию @SuppressWarnings("unchecked") может быть добавлено для подавления предупреждения безопасности типа. Это происходит, потому что вы должны отливать Object до общего типа. С Java типа erasure нет никакого способа узнать для компилятора, если бросок безопасен во время выполнения. Here - это еще одно сообщение. Кроме того, e.getMessage(); ничего не делает, вместо этого напечатайте или используйте e.printStackTrace();.

+0

спасибо за помощь, он работает, но я должен добавить «@SuppressWarnings (« unchecked »)». Я не уверен, что это делает, но после того, как он был добавлен. Я больше не получаю предупреждение о «Тип безопасности: снятие флажка с объекта на ArrayList » –

+0

Вы правы, и вы не можете избежать этого предупреждения, просто подавите его. Обновлен ответ. – thatguy

+0

Является ли @SupressWarnings («непроверенным») хорошим кодом? В этом случае я бы сохранил это, поскольку я могу думать о другом. –