2011-11-04 5 views
-1

소켓 연결을 통해 직렬화 될 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?**); 

을 나는에 통과 할 클래스의 어떤 종류의 모르겠어요 나도 자바 반사와 경험이 아니에요, 그래서 여기에 어떤 도움도 좋은 것입니다. 감사합니다

+0

찾고 계신 정보를 알려 주실 수 있습니까? "what goes here"마커는 Bozho의 대답으로 고쳐 져야했지만 대답을 거부하는 것은 꽤 혼란 스럽습니다. – aishwarya

+0

새로운 쓰기 가능 목록은 클래스 을 사용합니다. Bozho의 답변은 클래스 을 기대하는 인수 대신에 새로운 Writable 목록을 전달할 것을 제안하는 것으로 보입니다. 나는 꽤 잘 동작한다고 생각하지 않습니다. 이것이 혼란 스러울지라도 용서해주세요. ( – Xzhsh

답변

0

new WritableList<Location>(Location.class)를 BEW해야합니다. .newInstance()을 사용하여 클래스를 인스턴스화 한 다음 .readFrom()을 호출하는 데이 클래스를 인스턴스화해야 할 필요는 없습니다. .newInstance()은 코드에서 사용될 때 일반적으로 나쁜 기호입니다. 이는 인수가없는 생성자 (이 경우에는 WritableList 클래스에는 존재하지 않음)가 있다고 가정하고 존재하는 경우에도 no- 인수 생성자를 사용하여 데이터를 객체로 전달하지 못하게합니다.

+0

그건 아마도 사실입니다. 나는 인터페이스를 디자인했기 때문에 다른 방식으로했을 것입니다. 어쨌든이 작업을 수행하는 좋은 방법을 실제로 볼 수 없기 때문에이 대답을 받아 들일 것입니다. – Xzhsh

1

내 생각 엔 그것이 내가 문제가 이것의 디자인과 생각

+0

문제는, WritableList 이 아닌 중첩 목록이 아닌 것입니다. – Xzhsh

관련 문제