Java ��� Kotlin

Java �������ɵ��� Kotlin ���롣

����

Kotlin ���Ի��������� Java Ԫ�أ�

  • һ�� getter ����������ͨ����ǰ׺ get �����
  • һ�� setter ����������ͨ����ǰ׺ set �����ֻ������ var ���ԣ���
  • һ��˽���ֶΣ�������������ͬ���������ھ���Ļ���ֶε����ԣ���
    ���磬var firstName: String ��������� Java ������
private String firstName;

public String getFirstName() {
    return firstName;
}

public void setFirstName(String firstName) {
    this.firstName = firstName;
}

������Ե������� is ��ͷ����ʹ�ò�ͬ������ӳ�����getter ������������������ͬ������ setter ��������ͨ���� is �滻Ϊ set ��á� ���磬�������� isOpen���� getter ����� isOpen()������ setter ����� setOpen()�� ��һ�����������κ����͵����ԣ����������� Boolean��

��������

�� org.foo.bar ���ڵ� example.kt �ļ������������еĺ��������ԣ�������չ������ �������һ����Ϊ org.foo.bar.ExampleKt �� Java ��ľ�̬������

// example.kt
package demo

class Foo

fun bar() {
}

// Java
new demo.Foo();
demo.ExampleKt.bar();

����ʹ�� @JvmName ע���޸����ɵ� Java ���������

@file:JvmName("DemoUtils")

package demo

class Foo

fun bar() {
}

// Java
new demo.Foo();
demo.DemoUtils.bar();

�������ļ�����������ͬ�� Java ������������ͬ����������ͬ��������ͬ�� @JvmName ע�⣩ͨ���Ǵ���ġ�Ȼ�����������ܹ�����һ����һ�� Java ����࣬������ָ���������Ұ������������ļ��о��и����Ƶ����������� Ҫ����������������ۣ�������������ļ���ʹ�� @JvmMultifileClass ע�⡣

// oldutils.kt
@file:JvmName("Utils")
@file:JvmMultifileClass

package demo

fun foo() {
}
// newutils.kt
@file:JvmName("Utils")
@file:JvmMultifileClass

package demo

fun bar() {
}
// Java
demo.Utils.foo();
demo.Utils.bar();

ʵ���ֶ�

�����Ҫ�� Java �н� Kotlin ������Ϊ�ֶα�¶���Ǿ���Ҫʹ�� @JvmField ע������ע�� ���ֶν�������ײ�������ͬ�Ŀɼ��ԡ����һ��������Ļ���ֶΣ�backing field������˽�С�û�� open /override ���� const ���η����Ҳ��DZ�ί�е����ԣ���ô������� @JvmField ע������ԡ�

class C(id: String) {
@JvmField val ID = id
}
// Java
class JavaClient {
public String getID(C c) {
return c.ID;
}
}
�ӳٳ�ʼ�������ԣ���Java�У�Ҳ�ᱩ¶Ϊ�ֶΡ� ���ֶεĿɼ����� lateinit ���Ե� setter ��ͬ��

��̬�ֶ�

�������������������������� Kotlin ���Ի��ڸ�������������������������о��о�̬Ļ���ֶΡ�

ͨ����Щ�ֶ���˽�еģ�������ͨ�����·�ʽ֮һ��¶������

@JvmField ע�⣻
lateinit �����
const �����
ʹ�� @JvmField ��ע����������ʹ���Ϊ�����Ա��������ͬ�ɼ��Եľ�̬�ֶΡ�

class Key(val value: Int) {
companion object {
@JvmField
val COMPARATOR: Comparator = compareBy { it.value }
}
}
// Java
Key.COMPARATOR.compare(key1, key2);
// Key ���е� public static final �ֶ�
������������߰��������е�һ���ӳٳ�ʼ�������Ծ��������� setter ��ͬ�ɼ��Եľ�̬Ļ���ֶΡ�

object Singleton {
lateinit var provider: Provider
}
// Java
Singleton.provider = new Provider();
// �� Singleton ���е� public static ��-final �ֶ�
�� const ��ע�ģ��������Լ��ڶ���ģ������� Java �л��Ϊ��̬�ֶΣ�

// �ļ� example.kt

object Obj {
const val CONST = 1
}

class C {
companion object {
const val VERSION = 9
}
}

const val MAX = 239
�� Java ��

int c = Obj.CONST;
int d = ExampleKt.MAX;
int v = C.VERSION;
��̬����

����������Kotlin ������������ʾΪ��̬������ Kotlin ������Ϊ�����������������ж���ĺ������ɾ�̬����������㽫��Щ������עΪ @JvmStatic �Ļ��� �����ʹ�ø�ע�⣬�������Ȼ�����Ӧ������������ɾ�̬������Ҳ���ڶ�������������ʵ�������� ���磺

class C {
companion object {
@JvmStatic fun foo() {}
fun bar() {}
}
}
���ڣ�foo() �� Java ���Ǿ�̬�ģ��� bar() ���ǣ�

C.foo(); // û����
C.bar(); // ���󣺲���һ����̬����
C.Companion.foo(); // ����ʵ������
C.Companion.bar(); // Ψһ�Ĺ�����ʽ
������������Ҳͬ����

object Obj {
@JvmStatic fun foo() {}
fun bar() {}
}
�� Java ��

Obj.foo(); // û����
Obj.bar(); // ����
Obj.INSTANCE.bar(); // û���⣬ͨ������ʵ������
Obj.INSTANCE.foo(); // Ҳû����
@JvmStatic��ע��Ҳ����Ӧ���ڶ���������������ԣ� ʹ�� getter �� setter �����ڸö��������ð�������������Ǿ�̬��Ա��

�ɼ���

Kotlin �Ŀɼ��������з�ʽӳ�䵽 Java��

private ��Ա����� private ��Ա��
private �Ķ�����������ɰ����ֲ�������
protected ���� protected��ע�� Java �������ͬһ��������������ܱ�����Ա�� �� Kotlin ���ܣ����� Java �����ʸ��㷺�Ĵ��룩��
internal �������Ϊ Java �е� public��internal ��ij�Ա��ͨ���������Σ�ʹ��������� Java ������ʹ�õ������Ҹ��� Kotlin ����ʹ������������ͬǩ���ij�Ա�������ɼ���
public ���� public��
KClass

��ʱ����Ҫ������ KClass ���Ͳ����� Kotlin ������ ��Ϊû�д� Class �� KClass ���Զ�ת�������������ͨ������ Class.kotlin ��չ���Եĵȼ���ʽ���ֶ�����ת����

kotlin.jvm.JvmClassMappingKt.getKotlinClass(MainView.class)
�� @JvmName ���ǩ����ͻ

��ʱ��������һ�� Kotlin �е������������ֽ�����������һ�� JVM ���ơ� ��ͻ�����������������Ͳ��������ģ�

fun List.filterValid(): List
fun List.filterValid(): List
��������������ͬʱ���壬��Ϊ���ǵ� JVM ǩ����һ���ģ�filterValid(Ljava/util/List;)Ljava/util/List;�� ����������ϣ�������� Kotlin ������ͬ���ƣ�������Ҫ�� @JvmName ȥ��ע���е�һ����������������ָ����ͬ��������Ϊ������

fun List.filterValid(): List

@JvmName(“filterValidInt”)
fun List.filterValid(): List
�� Kotlin �����ǿ�������ͬ������ filterValid �����ʣ����� Java �У����Ƿֱ��� filterValid �� filterValidInt��

ͬ���ļ���Ҳ���������� x �ͺ��� getX() ���棺

val x: Int
@JvmName(“getX_prop”)
get() = 15

fun getX() = 10
��������

ͨ���������дһ����Ĭ�ϲ���ֵ�� Kotlin �������� Java ��ֻ����һ�����в��������ڵ���������ǩ���ķ����ɼ������ϣ���� Java �����߱�¶������أ�����ʹ�� @JvmOverloads ע�⡣

��ע��Ҳ�����ڹ��캯������̬�����ȡ����������ڳ��󷽷��������ڽӿ��ж���ķ�����

class Foo @JvmOverloads constructor(x: Int, y: Double = 0.0) {
@JvmOverloads fun f(a: String, b: Int = 0, c: String = “abc”) {
����
}
}
����ÿһ����Ĭ��ֵ�IJ�������������һ����������أ�������ػ��������������ұߵ����в������Ƴ������������У����������´��� ��

// ���캯����
Foo(int x, double y)
Foo(int x)

// ����
void f(String a, int b, String c) { }
void f(String a, int b) { }
void f(String a) { }
��ע�⣬��ι��캯�������������һ��������й��캯����������Ĭ��ֵ����ô��Ϊ������һ�����е��޲ι��캯���������û�� @JvmOverloads ע��Ҳ��Ч��

�ܼ��쳣

����������Kotlin û���ܼ��쳣�� ���ԣ�ͨ�� Kotlin ������ Java ǩ�����������׳��쳣�� �������������һ�������� Kotlin ������

// example.kt
package demo

fun foo() {
throw IOException()
}
Ȼ��������Ҫ�� Java �е���������׽����쳣��

// Java
try {
demo.Example.foo();
}
catch (IOException e) { // ����foo() δ�� throws �б������� IOException
// ����
}
��Ϊ foo() û������ IOException�����Ǵ� Java �������õ���һ��������Ϣ�� Ϊ�˽��������⣬Ҫ�� Kotlin ��ʹ�� @Throws ע�⡣

@Throws(IOException::class)
fun foo() {
throw IOException()
}
�հ�ȫ��

���� Java �е��� Kotlin ����ʱ��û����ֹ���ǽ� null ��Ϊ�ǿղ������ݡ� �����Ϊʲô Kotlin �����������ǿղ����Ĺ��к�����������ʱ��⡣ �������Ǿ����� Java �����������õ� NullPointerException��

�ͱ�ķ���

�� Kotlin ����ʹ�����������ͱ䣬������ѡ����Դ� Java �����п������ǵ��÷��������Ǽ��������������������ʹ�����ĺ�����

class Box(val value: T)

interface Base
class Derived : Base

fun boxDerived(value: Derived): Box = Box(value)
fun unboxBase(box: Box): Base = box.value
һ�ֿ���������Ȼ�ؽ���������ת���� Java ����ķ�ʽ���ܻ��ǣ�

Box boxDerived(Derived value) { ���� }
Base unboxBase(Box box) { ���� }
�����ǣ��� Kotlin �����ǿ�������д unboxBase(boxDerived(“s”))�������� Java �����в�ͨ�ģ���Ϊ�� Java ���� Box ���䷺�Ͳ��� T ���Dz��ͱ�ģ����� Box ������ Box �����ࡣ Ҫʹ���� Java �й��������ǰ������������� unboxBase��

Base unboxBase(Box<? extends Base> box) { ���� }
��������ʹ�� Java ��ͨ������ͣ�? extends Base����ͨ��ʹ�ô��ͱ���ģ���������ͱ䣬��Ϊ�� Java ��ֻ��������

������Ϊ��������ʱ��Ϊ���� Kotlin �� API �� Java �й���������Э�䶨��� Box �������� Box ��Ϊ Box<? extends Super> �����߶�����䶨��� Foo ���� Foo<? super Bar>����������һ������ֵʱ�� ���Dz�����ͨ�������Ϊ���� Java �ͻ��˽����봦�����ǣ�������Υ������ Java �����񣩡���ˣ����ǵ�ʾ���еĶ�Ӧ����ʵ���Ϸ������£�

// ��Ϊ�������͡���û��ͨ���
Box boxDerived(Derived value) { ���� }

// ��Ϊ����������ͨ���
Base unboxBase(Box<? extends Base> box) { ���� }
ע�⣺������������ final ʱ������ͨ���ͨ��û�����壬����������ʲô�ط� Box ʼ��ת��Ϊ Box��

���������Ĭ�ϲ�����ͨ����ĵط���Ҫͨ��������ǿ���ʹ�� @JvmWildcard ע�⣺

fun boxDerived(value: Derived): Box<@JvmWildcard Derived> = Box(value)
// ����ת����
// Box<? extends Derived> boxDerived(Derived value) { ���� }
��һ���棬������Ǹ�������ҪĬ�ϵ�ͨ���ת�������ǿ���ʹ��@JvmSuppressWildcards

fun unboxBase(box: Box<@JvmSuppressWildcards Base>): Base = box.value
// �ᷭ���
// Base unboxBase(Box box) { ���� }
ע�⣺@JvmSuppressWildcards ���������ڵ������Ͳ������������������������纯�����ࣩ���Ӷ��������е�����ͨ�����

Nothing ���ͷ���

���� Nothing ������ģ���Ϊ���� Java ��û����Ȼ�Ķ�Ӧ��ȷʵ��ÿ�� Java �������ͣ����� java.lang.Void �����Խ��� null ֵ������ Nothing ���С���ˣ��������Ͳ����� Java ������׼ȷ��ʾ�������Ϊʲô��ʹ�� Nothing �����ĵط� Kotlin ����һ��ԭʼ���ͣ�

fun emptyList(): List = listOf()
// �ᷭ���
// List emptyList() { ���� }