자바Java Generic제네릭 콜백Callback 사용시 T.class를 대체Alternative하는 방법들…

결론 : 메서드의 파라미터로 받는다.
T가 있는데 굳이 파라미터로 새로 받으려면 좀 갑갑하지만… 괜히 두번하는것같아서 하기싫지만 현재 이 방법이 가장 좋은것 같다.

토끼 메세지큐 사용중..

//콜백인터페이스
public interface MQCallback<T extends HealthyMonkey> {

	Class<T> getThis();
	T onMessageReceived(T message);
}
//수신인터페이스
public interface MQReceiver<T extends HealthyMonkey> {

	T receive(MQCallback<T> callback) throws IOException;
}
//송신인터페이스
public interface MQSender<T extends HealthyMonkey>{

	void send(T domain) throws IOException;
	void send(List<T> domains) throws IOException;
}

위 구조로 만들었는데…. 메세지 프로토콜을 json형태로 정했는데…

<dependency>
  <groupId>net.sf.json-lib</groupId>
  <artifactId>json-lib</artifactId>
  <version>2.4</version>
  <classifier>jdk15</classifier>
</dependency>

 

위에놈을 가지고 jsonString을 domain으로 만들려고 하니 문제가 생기는거다.

T t = (T)JSONObject.toBean(jsonObject, T.class);

를 쓰고싶은데 안되니까… 그래서 콜백에 메서드를 한개 추가해줬다. getThis() 위의 소스코드는 밑의 메서드가 포함되어있다.

T t = (T)JSONObject.toBean(jsonObject, callback.getThis());

그럼 제네릭될때 처리된다.

까먹을까봐…. 그리고 아무나 참고하시라고 써놓는다
제목에 영어와 한글을 섞는건 검색하기 쉬우라고