소켓 연결을 통해 직렬화 될 List (시스템 클래스 프로젝트 용)를 작성하려고합니다.클래스 내부에 일반 컨테이너를 채우는 방법?
요구 사항 스펙에 따르면, 길이에 대한 int를 작성한 다음 각 요소를 작성하여 List를 직렬화해야합니다.
또한 스트림에서 데이터를 읽는 (정적이 아닌) readFrom (InputStream in) 메서드가 있어야합니다.
매개 변수로 사용하는 일반 WritableList 개체를 만드는 방법이 있는지, 그리고 readFrom이 호출 될 때 자체적으로 채워지는지 궁금합니다.
내가 아는 바로는, 여러분은 실제로 해킹 된 리플렉션없이 객체 내부에 제네릭 타입의 타입을 얻을 수 없습니다. 그래서 나는 그러나, 지금 클래스로 WritableList에 전달하는 방법을 완전히 확실하지 않다 그래서
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();
}
}
}
}
처럼 생성자에 매개 변수로 클래스를 전달하는 생각을했다. 내가 지금처럼 인스턴스화 할 때 :.
grid = new WritableList<WritableList<Location>>(**What goes here?**);
을 나는에 통과 할 클래스의 어떤 종류의 모르겠어요 나도 자바 반사와 경험이 아니에요, 그래서 여기에 어떤 도움도 좋은 것입니다. 감사합니다
찾고 계신 정보를 알려 주실 수 있습니까? "what goes here"마커는 Bozho의 대답으로 고쳐 져야했지만 대답을 거부하는 것은 꽤 혼란 스럽습니다. – aishwarya
새로운 쓰기 가능 목록은 클래스을 사용합니다. Bozho의 답변은 클래스 을 기대하는 인수 대신에 새로운 Writable 목록을 전달할 것을 제안하는 것으로 보입니다. 나는 꽤 잘 동작한다고 생각하지 않습니다. 이것이 혼란 스러울지라도 용서해주세요. ( –
Xzhsh