Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Kotlin 의 @JvmOverloads 어노테이션 #155

Open
occidere opened this issue Dec 6, 2020 · 0 comments
Open

Kotlin 의 @JvmOverloads 어노테이션 #155

occidere opened this issue Dec 6, 2020 · 0 comments
Assignees

Comments

@occidere
Copy link
Owner

occidere commented Dec 6, 2020

@JvmOverloads

kotlin 함수에 default parameter 가 있는 경우 Java 에서 사용이 용이하도록 기본 인자들이 overload 된 메서드들를 생성한다.


Example

예를들어 아래와 같은 2개의 default parameter 를 지닌 kotlin 함수가 있다고 하자.

class MyElasticClient {
    fun check(query: String, async: Boolean = false, ignoreException: Boolean = false) {
        // 코드 생략
    }
}

그러나 Java 에선 기본 인자 개념이 없기 때문에 모든 인자를 전부 입력해야 한다.

public static void main(String[] args) {
	MyElasticClient client = new MyElasticClient();
	client.check("query"); // compile-error
	client.check("query", false); // compile-error
	client.check("query", false, false); // ok
}

이 때 kotlin 함수에 @JvmOverloads 를 붙이면 자동으로 default methods 를 overloads 한 메서드들을 생성해준다.

class MyElasticClient {
    @JvmOverloads
    fun check(query: String, async: Boolean = false, ignoreException: Boolean = false) {
        // 코드 생략
    }
}

이 후 Java 에서도 원하는대로 인자를 생략해서 사용할 수 있다.

public static void main(String[] args) {
	MyElasticClient client = new MyElasticClient();
	client.check("query"); // ok
	client.check("query", false); // ok
	client.check("query", false, false); // ok
}

참고

@occidere occidere self-assigned this Dec 6, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant