-
2.2.1 Kotlin调用Java
-
2.2.2 java调用kotlin
===================================================================
| | java | kotlin |
| — | — | — |
| 继承/实现 | extend implements | : |
| 强转 | Integer.parse(String) | String.toInt/as Int |
| 找控件 | findViewById(R.id.btn_login) | 直接用btn_login就行,就是view本身 |
| TextView | tv.setText(“”) | tv.text=“” |
| EditText | ed.setText("") | ed.text = Editable.Factory.getInstance().newEditable("") |
===================================================================
1.集合与可空性
前边我们知道如果一个变量可以为空,我们在定义的时候就在该变量前边加个?,来表示该变量的值可为null。同样集合也可以事先在定义的时候知道是否持有null元素。对于一个集合,我们也应该考虑到,这个集合是否可以存储null值,对应于有包含可空值的集合和包含非空值的集合。
举例 val result=ArrayList<Int?>() ArrayList<Int?>是能持有Int?类型值的列表,换句话说就是,可以持有Int或者是null。
这里需要注意的是,变量自己类型的可空性和用作类型参数的类型的可控性是有区别的。 即包含可空Int列表和包含Int的可空列表
包含可空的int列表 :(指的是列表中单个值是可空的),列表本身始终不为null,但是列表中的每个值都可以为null,
包含int的可空列表:(指的是整个列表是可空的) 可能包含空引用,而不是列表实例,但列表中的元素保证是非空的
所以要小心决定是集合的元素还是集合本身可空。
2.只读集合和可变集合
Kotlin的集合设计与Java不同的是,它把访问集合数据的接口和修改集合数据的接口分开了。这种区别存在于最基础的使用集合的接口之中,Kotlin.collections.Collection。使用这个接口,可以遍历集合中的元素、获取集合的大小、判断集合中是否包含某个元素,以及执行其他从该集合中读取数据的操作。但是这个接口没有任何添加或移除元素的方法。
使用Kotlin.collections.MutableCollections接口可以修改集合中的数据。它继承了普通的Kotlin.collections.Collection接口,还提供了方法来添加和移除元素、清空集合等。
| 集合类型 | 只读 | 可变 |
| — | — | — |
| List | listOf | mutableListOf
arrayListOf |
| Set | setOf | mutableListOf
hashSetOf
linkedSetOf
sortedSetOf |
| Map | mapOf | mutableMapOf
hashMapOf
linkedMapOf
sortedMapOf |
java代码:
String mName = “Java string name”;
final String mName = “Java string name”;
kotlin代码:
var mName = “kotlin string name”
val mName = “kotlin string name”
java代码:
String mName;
mName = null;
kotlin代码:
var mName : String?
mName = null
java代码:
String text = “First Line\n” +
“Second Line\n” +
“Third Line”;
kotlin代码:
val text = “”"
|First Line
|Second Line
|Third Line
“”".trimMargin()
java代码:
String text = x > 5 ? “x > 5” : “x <= 5”;
kotlin代码:
val text = if (x > 5)
“x > 5”
else “x <= 5”
java代码:
if (score >= 0 && score <= 300) { }
kotlin代码:
if (score in 0…300) { }
------------------------------------------
java代码:
String strA = “a”;
String strB = “b”;
Log.e(“TAG”, “print:” + strA + strB);
kotlin代码:
val strA = “a”
val strB = “b”
Log.e(“TAG”, “print: s t r A strA strAstrB”)
java代码:
final List listOfNumber = Arrays.asList(1, 2, 3, 4);
final Map<Integer, String> keyValue = new HashMap<Integer, String>();
map.put(1, “Amit”);
map.put(2, “Ali”);
map.put(3, “Mindorks”);
// Java 9
final List listOfNumber = List.of(1, 2, 3, 4);
final Map<Integer, String> keyValue = Map.of(1, “Amit”,
2, “Ali”,
3, “Mindorks”);
kotlin代码:
val listOfNumber = listOf(1, 2, 3, 4)
val keyValue = mapOf(1 to “Amit”,
2 to “Ali”,
3 to “Mindorks”)
java代码:
void doSomething() {
// todo here
}
void doSomething(int… numbers) {
// todo here
}
kotlin代码:
fun doSomething() {
// logic here
}
fun doSomething(vararg numbers: Int) {
// logic here
}
java代码:
if (object instanceof Car) {
Car car = (Car) object;
}
kotlin代码:
if (object is Car) {
var car = object // 智能转换
}
java代码:
btnLogin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
kotlin代码:
btn_login.setOnClickListener(View.OnClickListener { })
java代码:
if(a != null && a.b != null && a.b.c != null) {
String user = a.b.c.d;
}
kotlin代码:
val user = a?.b?.c?.d
java代码:
if (str != null) {
int length = str.length();
}
kotlin代码:
str?.let {
val length = str.length
}
// 更简单的写法
val length = str?.length
// 为null赋予默认值
val length = str?.length?:0
java代码:
int getScore() {
// logic here
return score;
}
kotlin代码:
fun getScore(): Int {
// logic here
return score
}
// 单表达式函数
fun getScore(): Int = score
java代码:
int getScore(int value) {
// logic here
return 2 * value;
}
kotlin代码:
fun getScore(value: Int): Int {
// logic here
return 2 * value
}
// 单表达式函数
fun getScore(value: Int): Int = 2 * value
java代码:
public double cube(double x) {
return x * x * x;
}
kotlin代码:
fun cube(x: Double) : Double = x * x * x
java代码:
public int sum(int… numbers) { }
kotlin代码:
fun sum(vararg x: Int) { }
java代码:
public class MyClass {
public static void main(String[] args){
}
}
kotlin代码:
fun main(args: Array) {
}
java代码:
public static void main(String[]args){
openFile(“file.txt”, true);
}
public static File openFile(String filename, boolean readOnly) { }
kotlin代码:
fun main(args: Array) {
openFile(“file.txt”, readOnly = true)
}
fun openFile(filename: String, readOnly: Boolean) : File { }
java代码:
java代码:
public class MyClass {
public static void main(String[] args){
}
}
kotlin代码:
fun main(args: Array) {
}
java代码:
public static void main(String[]args){
openFile(“file.txt”, true);
}
public static File openFile(String filename, boolean readOnly) { }
kotlin代码:
fun main(args: Array) {
openFile(“file.txt”, readOnly = true)
}
fun openFile(filename: String, readOnly: Boolean) : File { }
java代码: