마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

코틀린 에서 java로 변환

0 추천

코틀린을 java로 바꾸는 중인데 

아래 코드는 java 생성자를 어떤 식으로 만들어야 할지 모르겠네요. 람다식 저 부분이 어떤식으로 해야할지 모르겠습니다.

class TodoAdapter(private val realmResult: OrderedRealmCollection<Todo>,
                  private val click: (Long) -> Unit) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
피쿠아라 (160 포인트) 님이 4월 26일 질문

1개의 답변

+1 추천
 
채택된 답변

개인적인 생각인데, 자바에서 코틀린으로 변환하는 건 툴에서 어느정도까지 지원해 주지만, 반대는 안되는 걸로 압니다. 왜 굳이 코틀린으로 작성된 코드를 다시 자바로 변환하시려고 하는 건지 모르겠지만, 코틀린을 배우시는게 더 빠른 옵션일 것 같습니다. 어차피 코틀린을 다 이해해야 하니까요.

코틀린의 람다는 파라미터의 갯수에 따라서 자바의  Function1, Function2, Function3... Function7(이게 마지막인가...)의 인터페이스로 표현될 수 있습니다. 만약 이 인터페이스를 못 쓰신다면 해당 람다를 표현하는 인터페이스를 직접 만드시면 됩니다.

// long값을 하나 받아서 void를 리턴하는 코틀린 람다
click: (Long) -> Unit


// 자바로 변환하면 인터페이스가 됩니다. 인터페이스 이름과 메소들 이름은 적당한 것으로 주시면 되구요,
// 메소드의 리턴타입과 매개변수의 타입만 잘 맞춰주시면 됩니다.
public interface OnClickListener {
     void onClick(position: long);
}

 

참고로 람다에 어떤 값이 넘어오시는지를 아셔야  onClick의 매개변수 이름을 직관적인 이름으로 바꾸실 수 있을 겁니다.

spark (58,180 포인트) 님이 4월 27일 답변
피쿠아라님이 4월 28일 채택됨
답변감사드립니다. 코틀린에서 java로 구지 변환해보는 것은 그냥 하나의 시도로 봐주시면 될 거 같습니다. 코틀린 코드를 java로 변환해보고 그 반대도 해보는 시도랄까요.^^
참고로 자바와 코틀린 간의 데이터 타입에 대해서 잘 이해하셔야 할 필요가 있습니다. 자바에는 null type과 non-null type이 구분이 없지만 코틀린은 구분이 존재하므로 코드 변환이 될 때 데이터 타입이 달라집니다. 아래는 자바 코틀린간 데이터 타입 매핑입니다.

Java           Kotlin
String          String or String?
int               Int
Integer        Int?
long             Long
Long            Long?
float             Float
Float            Float?
double          Double
Double         Double?
boolean        Boolean
Boolean        Boolean?

그리고 자바의 데이터 타입은 아니지만 Nullable 타입에는 @Nullable, non-null type에는 @NotNull 어노테이션을 붙여줌으로써 자바 컴파일러가 좀 더 타입체크를 잘 할 수 있도록 해줄 수 있습니다.
...