Я пытаюсь написать список (для проекта системного класса), который будет сериализован через сокетное соединение.
В спецификациях требований сказано, что список должен быть сериализован, написав int для длины, а затем записав каждый элемент.
Кроме того, должен быть (нестатический) метод readFrom (InputStream in), который считывает данные из потока.
Мне было интересно, есть ли способ создать универсальный объект WritableList, который принимает в качестве параметра и заполняет себя, когда вызывается readFrom?
Из того, что я знаю, вы не можете получить тип универсального типа внутри объекта без некоторого хакерского отражения. Итак, я думал о передаче класса в качестве параметра в конструкторе, например:
public class WritableList<E extends Writable> extends ArrayList<E> implements Writable {
Class<E> storedClass;
protected WritableList(Class<E> storedClass)
{
this.storedClass = storedClass;
}
@Override
public void readFrom(InputStream in) throws IOException {
int length = DataTypeIO.readInt(in);
this.clear();
for (int i = 0; i < length; i++)
{
E e;
try {
e = storedClass.newInstance();
e.readFrom(in);
add(e);
} catch (InstantiationException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IllegalAccessException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
}
Однако сейчас я не совсем уверен, как передать WritableList как класс. Когда я пытаюсь создать его так:
grid = new WritableList<WritableList<Location>>(**What goes here?**);
Я не уверен, какой класс пройти. Я не слишком разбираюсь в Java-рефлексии, поэтому любая помощь здесь будет отличной. Спасибо