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

less than 1 minute read

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

토끼 메세지큐 사용중..

//콜백인터페이스 public interface MQCallback {

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형태로 정했는데…

net.sf.json-lib json-lib 2.4 jdk15

 

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

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

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

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

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

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