Kotlin 재 부팅 JvmOverloads
3594 단어 -----KotlinKotlin
void add(int a){}
void add(int a,int b){}
void add(int a,int b,int c){}
void add(int a,int b,int c,int d){}
void add(int a,int b,int c,int d,int e){}
우 리 는 실제 적 으로 없 는 매개 변수 에 기본 적 인 매개 변 수 를 주 고 최종 적 으로 매개 변수 가 가장 많은 방법 으로 호출 하 는 것 입 니 다. Kotin 에서 이런 방법 을 어떻게 쓰 는 지 하 는 방법 은 충분 합 니 다.
fun add(a: Int,b:Int=0,c:Int=0,d:Int=0,e:Int=0) {}
Kotlin 에 서 는 인자 에 기본 값 을 줄 수 있 기 때문에 Kotlin 은 다시 불 러 올 필요 가 없습니다.어떤 사람 은 나의 리 셋 이 서로 다른 논리 적 인 것 을 호출 했다 고 말 했 습 니 다. 그러면 방법 명 을 다시 명명 해 주 십시오.사용자 정의 View 를 사용 할 때 4 개의 구조 함 수 를 다시 불 러 옵 니 다. 자바 는 이렇게 이 루어 집 니 다.
public class TestView extends View {
public TestView(Context context) {
this(context,null);
}
public TestView(Context context, @Nullable AttributeSet attrs) {
this(context, attrs,0);
}
public TestView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
this(context, attrs, defStyleAttr,0);
}
public TestView(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
}
Kotlin 에서 매우 간단 합 니 다:
class PieChart @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0, defStyleRes: Int = 0) : View(context, attrs, defStyleAttr, defStyleRes) {
}
자바 와 호 환 되 지 않 으 면 @ JvmOverloads 는 생략 할 수 있 습 니 다.
@ JvmOverloads 의 설명 을 살 펴 보 겠 습 니 다.
/**
* Instructs the Kotlin compiler to generate overloads for this function that substitute default parameter values.
*
* If a method has N parameters and M of which have default values, M overloads are generated: the first one
* takes N-1 parameters (all but the last one that takes a default value), the second takes N-2 parameters, and so on.
*/
@Target(AnnotationTarget.FUNCTION, AnnotationTarget.CONSTRUCTOR)
@Retention(AnnotationRetention.BINARY)
@MustBeDocumented
public annotation class JvmOverloads
JvmOverloads 의 역할 은 기본 값 이 있 는 매개 변 수 를 다시 불 러 오 는 것 입 니 다. JvmOverloads 가 있 는 지 없 는 지 확인 해 보 겠 습 니 다.
class Overloads {
fun add(a: Int,b:Int=0) {}
}
Java 생 성:
public final class Overloads {
public final void add(int a, int b) {
}
// $FF: synthetic method
// $FF: bridge method
public static void add$default(Overloads var0, int var1, int var2, int var3, Object var4) {
if ((var3 & 2) != 0) {
var2 = 0;
}
var0.add(var1, var2);
}
}
자바 에서 호출 할 수 있 는 두 개의 인자 만 있 는 방법 을 발 견 했 습 니 다.
void test(){
new Overloads().add(0); //
}
Kotlin 에 서 는 가능 합 니 다.
다음은 JvmOverloads 가 있 습 니 다.
public final class Overloads {
@JvmOverloads
public final void add(int a, int b) {
}
// $FF: synthetic method
// $FF: bridge method
@JvmOverloads
public static void add$default(Overloads var0, int var1, int var2, int var3, Object var4) {
if ((var3 & 2) != 0) {
var2 = 0;
}
var0.add(var1, var2);
}
@JvmOverloads
public final void add(int a) {
add$default(this, a, 0, 2, (Object)null);
}
}
@ JvmOverloads 를 자바 로 바 꾸 면 해당 하 는 리 셋 방법 이 생 성 되 는 것 을 발 견 했 습 니 다.
요약: 1. @ JvmOverloads 는 자바 호출 Kotlin 을 호 환 하 는 기본 매개 변수 방법 이 있 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
AutoCompleteTextView에 포커스를 둔 채 키보드를 숨기기키보드에 의한 인풋에 대해서, 자동으로 문자를 보완해 주는 기능을 갖추고 있던 EditText입니다. 일반적으로 Google의 에 준거한 드롭다운 메뉴를 작성하는 경우는 다음과 같은 구현을 합니다. res/layou...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.