kotlin和java差别_Kotlin和Java的常用方法的区别总结
一.kotlin和java的常用語法區別
1)、類、public class、public final class
java
1
2public final class User{
}
1
2public class User{
}
kotlin
? kotlin中一個類默認就是public final的,所以如果想要一個類能被繼承,那么需要申明open class
1class User
1open class User
2)、數據模型bean,這里區分一下參數是final還是普通參數,對應kotlin中的val和var
java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21final class User{
private final String name;
private String phone;
public User(String name, String phone){
this.name = name;
this.phone = phone;
}
public String getName(){
return name;
}
public String getPhone(){
return phone;
}
public void setPhone(String phone){
this.phone = phone;
}
}
kotlin
kotlin中定義一個數據模型類,會非常簡單,因為默認有構造函數,和get和set方法,這里需要注意val對應的是java中的final申明字符串,而var對應的是普通字符串變量。
1class User(val name: String, var phone: String)
3)、可選參數構造函數的區別
java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15final class User{
private String name;
private String lastName;
public User(String name){
this(name, "");
}
public User(String name, String lastName){
this.name = name;
this.lastName = lastName;
}
// And Getters & Setters
}
kotlin
kotlin中可以直接在類的構造函數中定義參數的默認值,這種定義了默認值的參數就變成可選參數。
1class User(var name: String, var lastName: String = "")
4)、類的屬性自定義get、set方法
java
1
2
3
4
5
6
7
8
9
10
11
12
13public class Document{
private String id = "00x";
public String getId(){
return id;
}
public void setId(String id){
if(id != null && !id.isEmpty()) {
this.id = id;
}
}
}
kotlin
? kotlin中如果要自定義set方法,可以在屬性下面重寫set(value)方法,這里注意的就是field代表的就是當前屬性,比如這里就是指id
1
2
3
4
5
6class Document{
var id : String = "00x"
set(value) {
if(value.isNotEmpty()) field = value
}
}
5)、類、內部類、靜態內部類
java
1
2
3
4
5
6
7
8
9public class Documment{
class InnerClass{
}
public static class StaticInnerClass{
}
}
kotlin
1
2
3
4class Document{
inner class InnerClass
class StaticInnerClass
}
6)、抽象類、繼承抽象類
java
1
2
3
4
5
6
7
8
9
10public abstract class Document{
public abstract int calculateSize();
}
public class Photo extends Document{
@Override
public int calculateSize(){
}
}
kotlin
1
2
3
4
5
6
7
8
9abstract class Document{
abstract fun calculateSize(): Int
}
class Photo : Document() {
override fun calculateSize(): Int {
}
}
7)、接口、實現接口
java
1
2
3
4
5
6
7
8
9
10public interface Printable{
void print();
}
public class Document implements Printable{
@Override
public void print(){
}
}
kotlin
? 這里注意接口實現和繼承抽象類的區別是:接口不需要(),但繼承類是需要()的,這里其實()指代的是父類的構造函數。
1
2
3
4
5
6
7
8
9interface Printable{
fun print()
}
class Document : Printable{
override fun print() {
}
}
8)、單例模式 / 靜態類、靜態方法
java
1
2
3
4
5
6
7
8public class Document{
private static final Document INSTANCE = new Document();
public static Document getInstance(){
return INSTANCE;
}
}
kotlin
? kotlin中的單例模式非常簡潔,一個類申明為object即是單例,還有object申明的類內部的方法都是靜態方法
1
2
3object Document {
}
?
? 這里額外記錄一下kotlin中如果只想類中某一部分方法申明為靜態方法,可以用到companion object申明這些方法,companion object內申明的方法都是靜態方法
1
2
3
4
5
6
7companion object {
fun startActivity(context:Context) {
val intent = Intent()
intent.setClass(context, HomeActivity::class.java)
context.startActivity(intent)
}
}
9)、擴展方法
? java
1
2
3
4
5
6
7
8public class ByteArrayUtils{
public static String toHexString(byte[] data){
}
}
final byte[] dummyData = new byte[10];
final String hexValue = ByteArrayUtils.toHexString(dummyData);
? kotlin
? kotlin可以直接申明一個類的擴展函數,這樣一個類的對象就可以直接調用該擴展函數
1
2
3
4
5
6fun ByteArray.toHex() : String {
}
val dummyData = byteArrayOf()
val hexValue = dummyData.toHex()
二.kotlin中遇到的問題1)、kotlin.NotImplementedError: An operation is not implemented: Not yet implemented
原因是kotlin中類實現接口的方法,或者抽象類的方法,默認方法里會有
TODO( ... ),刪除掉這部分代碼,該異常即不會出現。
總結
以上是生活随笔為你收集整理的kotlin和java差别_Kotlin和Java的常用方法的区别总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 独家:知情人士称小米汽车接近获得新能源汽
- 下一篇: java美元兑换,(Java实现) 美元