android studio ver. 3.1.4
kotlin_version = 1.2.61



기존 자바 프로젝트를 kotlin 으로 변경하던 중에 새로운 문제에 부딪히게 되었습니다.


Java로 작성된 Network 모듈 코드입니다.

public class NetworkManager {

    private NetworkManager(@NonNull Context c) {
    }

    public interface OnNetworkListener<T> {
        void OnNetworkResult(String requestId, T res);
    }

    public void request(OnNetworkListener listener) {
        ResponseBase res = new ResponseBase(0, "Test!!! ");
        if (listener != null) {
            listener.OnNetworkResult("", res);
        }
    }
}


public class ResponseBase {
    
    public static final int RETURN_CODE_SUCCESS = 0;    // 성공

    public int code = 0;
    public String message = "";

    public ResponseBase(int code, String msg) {
        code = code;
        message = msg;
    }

    public boolean isSuccess() {
        return code == RETURN_CODE_SUCCESS;
    }
}

Java에서 사용시 

NetworkManager.getInstance(getBaseContext()).request(new NetworkManager.OnNetworkListener<ResponseBase>() {
            @Override
            public void OnNetworkResult(String requestId, ResponseBase res) {
                Logger.d("res , ", res.isSuccess());
                Logger.d("res , ", res.message);
            }
        });

Kotlin에서 변형시

NetworkManager.getInstance(baseContext).request {
            requestId, res ->

        }

여기까지는 문제 없이 되었지만,
값을 사용하려고 보니 아래 그림과 같이 에러가 발생을 합니다. res를 인식하지 못해서 그런거라 판단이 됩니다.
그래서 캐스팅을 어떻게 해야하나 구글링을 시작했습니다.




그래도 딱히 시원한 답을 얻지 못해서 문서를 정독해보았습니다.

https://kotlinlang.org/docs/reference/typecasts.html



최종 코드는 아래와 같이 사용하였고,
저같은 경우는 res 가 여러 케이스로 들어올수 있으므로,
2번째처럼 명시적인 사용은 오류를 일으킬 가능성이 큽니다.

override fun onCreate(savedInstanceState: Bundle?) {
	super.onCreate(savedInstanceState)

	NetworkManager.getInstance(baseContext).request {
		requestId, res ->
			if(res is ResponseBase) {   // java:: res instanceof ResponseBase
				d("res , ", res.isSuccess)
				d("res , ", res.message)
			}

			i("res 2 , ", (res as ResponseBase).isSuccess)  // java:: ((ResponseBase) res).isSuccess()
			i("res 2 , ", res.message)
	}
}


+ Recent posts