2017-02-14 13 views
0

Пожалуйста, обратите внимание, что это не тип «программа против интерфейса» вопросаИзбегайте использования таких типов реализации, как «ArrayList»; использовать интерфейс вместо (Сериализация выпуск)

Я получаю Избегайте использования типов реализации, как «ArrayList»; используйте интерфейс вместо в PMD при использовании ArrayList. Я понимаю, почему я получаю это, но в этом случае я не могу использовать список, потому что списки не Сериализуемые, но ArrayLists являются

Есть ли у меня какие-либо альтернатив вместо деактивация, что PMD проверить?

+1

Не уверен, что это важно. Сериализация происходит как среда выполнения, поэтому тип времени компиляции не имеет особого значения. Тип выполнения будет выписан, а нужный тип десериализован. –

+1

Это не сериализация. Если фактический тип сериализуется, у вас нет проблемы. – EJP

+1

@BoristheSpider Что делать, если это двоично? И что означает «(слишком рано)»? О чем ты говоришь? – EJP

ответ

-1

Одно из решений проблемы будет использовать generics с multiple type bound вместо указания ArrayList явно.

Вместо того чтобы писать:

public byte[] doSomething(final ArrayList<?> serializableList) { 
    serializableList.add(getSomeObject()); // List.add() 
    return SerializationUtils.serialize(serializableList); // Serializable 
} 

Вы можете написать:

public <T extends List<?> & Serializable> byte[] doSomething(final T serializableList) { 
    serializableList.add(getSomeObject()); // List.add() 
    return SerializationUtils.serialize(serializableList); // Serializable 
} 

Таким образом, ваш метод может принимать в качестве параметра все простирающуюся List и Serializable (ArrayList, LinkedList, ...).