자바Java Generic제네릭 콜백Callback 사용시 T.class를 대체Alternative하는 방법들…
결론 : 메서드의 파라미터로 받는다. 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형태로 정했는데…
위에놈을 가지고 jsonString을 domain으로 만들려고 하니 문제가 생기는거다.
T t = (T)JSONObject.toBean(jsonObject, T.class);
를 쓰고싶은데 안되니까… 그래서 콜백에 메서드를 한개 추가해줬다. getThis() 위의 소스코드는 밑의 메서드가 포함되어있다.
T t = (T)JSONObject.toBean(jsonObject, callback.getThis());
그럼 제네릭될때 처리된다.
까먹을까봐…. 그리고 아무나 참고하시라고 써놓는다 제목에 영어와 한글을 섞는건 검색하기 쉬우라고