kotlin 語法跟 java 的不一樣

本文是本人的做品,轉載請代表出處php

 

1.extends  用 (冐號):代替。MainActivity extends Activity,   java

  如今是  MaiActivity :Activity()android

2.interface 用(逗號),代替。 A interface B{}        git

  如今是  ,B{}github

3.override 不現進 註解,而是用到了方法中            express

  這樣寫 override fun onCreate(saveInstanceState:Bundle?)數組

4. 沒有switch case 了,                    bash

  如今用when()   ->app

5.kotlin沒有object類                      jvm

  如今是Any()沒有Object()

6.跟java同樣不能繼承final類                   

  繼承open abstract 類,而且默認是open,必需要寫修飾符

7.不在有分號,                          

  不在有分號,不在有分號,不過能夠寫的

8. java中沒能返回值是void,返回值寫在小括號左面          

  如今改爲空方法是Unit,方法用fun1, fun2,代替, 而且返回值要寫在小括號後面

      fun Unit(x: Any, y: Any) {

      fun Unit(x: Any, y: Any): Int{
      返回值能夠用一個表達式寫fun add(x: Int,y: Int) : Int = x + y
9.jave中每珍上對象都要new                   
  kotlin不須要new這個關鍵字

10.在java中給控件不能直接賦值,                
  在kotlin裏 經過import kotlinx.android.synthetic.main.demo.*

  text1.text = "hello world kotlin" 這樣就完成了"hello world kotlin"
11.for循環也不同了 在java中是這樣寫的for(int i = ; i < 10; i++)    
  Kotlin是這樣寫的
for (i in 0..99) {
12.java中方法在括號,   
    new Handler().postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        main_srl.setRefreshing(false);
                    }
                }, 5000);
  kotlin是這樣寫的
  Handler().postDelayed({ main_srl!!.isRefreshing = false }, 5000) }

13.調用方法的不一樣,我的目前發現除了調用set..Listener 仍是原來的方法,其它的都改變了
  一.
  java中
    main_srl.setOnRefreshListener(
  kotlin中
    main_srl!!.setOnRefreshListener {...
  二.java中
  main_srl.setRefreshing(false)
  kotlin中
  main_srl!!.isRefreshing = false //雙歎號的用法???
14 .->的用法
  java中是這樣寫的
        recyclerViewAdapter.setOnItemClickedListener(new HeaderRecyclerViewAdapter.onItemClickedListener() {
            @Override
            public void onItemClick(View view, int position) {
                Toast.makeText(MainActivity.this, "position " + position, Toast.LENGTH_SHORT).show();
            }
        });
  kotlin這樣寫的
  
recyclerViewAdapter.setOnItemClickedListener { view, position -> Toast.makeText(this@MainActivity, "position " + position, Toast.LENGTH_SHORT).show() }
15 . 強制轉換
  java中 mHeader(View)
  kotlin 中是mHeader as View


Add-non-null aserted 就是改變爲不是空的 mHeader!!
Case expressino 就是強制轉換 mHeader as View

16.變量

  1.java中分爲二類(基本,引用)八種(byte short int long flout double char boolean)

  2.kotlin 中分有如下不一樣之睡

    1.基本類型中 java中有的kotlin也有,就是不能給一個int賦值爲double

      var i Int = 1;

      var d Double = i .toDouble();  //其它也相似這樣沒有java中的自動提高,強轉的說法了!!!

    2. | & 或 和 和 改成了  or 和 and

      var testOr = Flag or Flags

      var testAnd = Flag and Flags

    3.變量 var  val  (這個相似java中的final)

    4.屬性  kotlin沒有get,set方法,直接賦值,直接使用

17. Anko具據說是一個很代替xml繪製ui的強大的類庫
18.java中asycTask
  kotlin 中 async{
    run(){
      uiThread{...}
      }}
19.with函數
  with是一個很是有用的函數,它包含在Kotlin的標準庫中。它接收一個對象和一個擴展函數做爲它的參數,而後使這個對象擴展這個函數。這表示全部咱們在括號中編寫的代碼都是做爲對象(第一個參數)的一個擴展函數,
  咱們能夠就像做爲this同樣使用全部它的public方法和屬性。當咱們針對同一個對象作不少操做的時候這個很是有利於簡化代碼。

20.加強For循環
java中: for(集合 變量:集合名)
kotlin中:

  2.獲得value
  for(String value:maps.values()){
            System.out.println(value);
        }
  3.獲得key,和value
   for(String string:map.keySet()){
  Integer integer = map.get(string);
  System.out.println(string +"....."+integer);
}

  3.1經過Entry集合訪問,對Entry感興趣,能夠訪問與key對應的Value值
   for(Entry entry:maps.entrySet()){
     System.out.println(entry.getKey()+":"+entry.getValue());
     }
  四、經過迭代Key集合訪問Map集合,maps.keySet()返回的是一個Set<String>集合,Set直接繼承Collection,因此能夠對其進行迭代。
for(變量名 in 變量集合)

21.三元表達式
 java中(condition ? then : else)
  kotlin中 if (a > b) a else b
  fun main(args: Array<String>) {
    println(args[0].toInt())
    println(args[1].toInt())
    println(max(args[0].toInt(), args[1].toInt()))
  }
  fun max(a: Int, b: Int) = if (a > b) a else b

22. switch case
  java中 switch(){
    case:
      breaak;
    }
  kotlin 中 when() ->
   fun main(args: Array<String>) {
    val language = if (args.size == 0) "EN" else args[0]
    println(when (language) {
        "EN" -> "Hello!"
        "FR" -> "Salut!"
        "IT" -> "Ciao!"
        "DU" -> "dub is a very excellent boy"
        else -> "Sorry, I can't greet you in $language yet"
    })
}

23.在java中是沒有""",這樣的符號
  kotlin中:
   fun main(args:Array<String>){
    val text = """
    Tell me and I forget.
    Teach me and I remember.
    Involve me and I learn.
    (Benjamin Franklin).
    """.trimMargin()
    print(text)
}

24.contait
  java String中contains
  kotlin
   if ("ddd" in array) // collection.contains(obj) is called
        println("Yes: array contains ddd")
25.循環
  java中:
  1.獲得key
  for(String k:maps.keySet()){
            System.out.println(k+":"+maps.get(k));
        }

    Iterator<String> iterator = maps.keySet().iterator();
           while(iterator.hasNext()){
               String key = iterator.next();
                System.out.println(key+":"+maps.get(key));
        }

  Iterator<Map.Entry<String,Integer>> it = map.entrySet().iterator();//Map遍歷
    while (it.hasNext()){
    Map.Entry<String, Integer> next = it.next();
    System.out.println("second type --> "+ "key"+ next.getKey()+",value"+next.getValue());
  }

 

  五、經過迭代Values集合訪問Map集合,maps.values()返回的是Collection<String>,因此能夠對其迭代。

    Iterator<String> iter= maps.values().iterator();
          while(iter.hasNext()){
              System.out.println(iter.next());
        }

 

  六、經過迭代Entry集合訪問Map集合,maps.entrySet()返回的是一個Set<Entry<String, String>>,Set直接繼承Collection,因此能夠對其迭代。

  Iterator<Entry<String, String>> it = maps.entrySet().iterator(); 
        while(it.hasNext()){ 
            Entry<String, String> entry = it.next(); 
            System.out.println(entry.getKey()+":"+entry.getValue()); 
        }

 7.項目中用到的高級寫法
  for (Iterator<String> iterator = map.keySet().iterator(); iterator.hasNext(); ) {
  StringBuffer sb = new StringBuffer();
  String key = iterator.next();
  sb.append("[").append(key).append("]");
  for (int k = map.get(key); k < 4; k++) {// 初使化;循環體;循環條件
  sb.append(k + ",");
  }
  }

kotlin中:
fun main(args: Array<String>) {
    val numbers = listOf(1, 2, 3)
    println(numbers.filter(::isOdd))//是這樣寫的
}
fun isOdd(x: Int) = x % 2 == 0

26.如何定義變量
Java 定義變量的寫法:String string = "hello"
基本等價的 Kotlin 定義變量的寫法:var string :String = "hello"

27.Java 定義 final 變量的寫法:
Java中這麼寫 final String string = "hello"
Kotlin 當中應該這麼寫 const val string:String = "hello"

28.如何定義函數
Java 當中如何定義函數,也就是方法,須要定義到一個類當中
public boolean testString(String name){...
等價的 Kotlin 寫法:
fun testString(name:String) :Boolean{...

29.如何定義數組
Java 的數組很是簡單,固然也有些抽象,畢竟是編譯期生成的類:
String[] names = new String[]{"a","b",}
Kotlin 的數組其實更真實一些,看上去更讓人容易理解:
val name:Array<String> = arrayOf{"a","b"}//避免byte short 拆箱,裝箱 寫法爲 XArray,例如 Int 的定製版數組爲 val ints = intArrayOf(1,2,3)
val emptyStrings :Array<String?> = arrayOfNulls(10)//Array T 即數組元素的類型。另外,String? 表示能夠爲 null 的 String 類型

30.如何寫變長參數
Java 的變長參數寫法以下:
void holle(String...names){...
Kotlin 的變長參數寫法以下:
fun hello(vararg names:String){...

31.如何寫三元運算符
Java 能夠寫三元運算符:
int code = isSuccessfully?200:400;
Kotlin 該怎麼寫呢?
int code = if(isSuccessfully) 200 else 400

31.如何寫 main 函數
Java 的寫法只有一種:
class MainJava{
  public static void main(String []args){
    ...
Kotlin,main 函數的寫法以下:
class MainKotlin{
  companion object{
    @jvmStatic
    fun main(args:Array<String>){
    ...

32.如何實例化類
 Java中:
 Dub dub = new Dub();
 Kotlin中:
 val dub = Dub();

33.如何寫 Getter 和 Setter 方法
Java 的 Getter 和 Setter 是一種約定俗稱,而不是語法特性,因此定義起來相對自由:
public class SetAndGet{
  private int x = 0;
  publc Int getX(){
    return x;
  public void setX(int x){
    this.x = x;
  Kotlin 是有屬性的:
  class kotlinSetAndGet{
  var x:Int = 0
  set(value) {field = value}
  get() = field

34.如何延遲初始化成員變量
Java 定義的類成員變量若是不初始化,那麼基本類型被初始化爲其默認值 int 0;boolean false; String null;
public class Hello{
  private String name;
Kotlin 當中直譯爲:
class Hello{
  private var name:String? = null;//若是不使用可控類型,須要加 lateinit 關鍵字
class Hello{
  private lateinit var name:String //lateinit 是用來告訴編譯器,name 這個變量後續會妥善處置的。


35.若是我要想定義一個能夠延遲到必定實際再使用並初始化的 final 變量,這在 Java 中是作不到的
Kotlin 有辦法,使用 lazy 這個 delegate 便可:
class Hello{
  private val name by lazy{
    NameProvider.getName()

36.如何得到 class 的實例
java中能夠 類名.class ,對象.getClass();Class.forName("");
剛剛接觸 Kotlin 的時候,獲取 Java Class 的方法倒是容易讓人困惑:
class Hello
val clazz = Hello::class.java // 拿到的是 Kotlin 的 KClass
若是想要拿到 Java 的 Class 實例,那麼就須要前面的辦法了。


37.List集合要從新劃分了
  不在是List<String>lists = new ArrayList<>();

  而是private var list MutableList<Entity> ?= null

  38.成員變量的寫法

  companion object {
    private val TAG = FirstActivity::class.java.simpleName
  }//寫在compaintion裏

 39.在Kotlin中寫上下文再也不是類名點this了而是

  hsMain!!.OnSelectList { text -> Toast.makeText(this@MainActivity, text, Toast.LENGTH_SHORT).show()

 

40.Kotlin中的空是Unit表示至關於void

 

41.伸展 spread符是什麼鬼  (在數組前面加上 *),Java中但是沒有

val a = arrayOf(1, 2, 3) val list = asList(-1, 0, *a, 4)


42.Kotlin竟支持局部函數,在Java中也是沒有的

  fun test(graph:Graph){

    fun text(current:Vertex,visited:Set<Vertex>){

      if(!visited.add(current) return

      for(v in curren.neighbors)

        test(v,visited)

  test(graph.vertices[0],HashSet())

43. ?.和 !!. 的區別?
  首先聲名在java中是沒有這個語法的,
  在kotlin中說下它們之間的不一樣
  if( is != null) is.change(); 在kotlin中是這樣的 is?.change()
  !!.就是非空判斷了

最後是本人在學習中有點迷惑的地方,後續進行完善也但願博友知道的進行講解 QQ:277627117

val qq = et_qq!!.text.toString().trim { it <= ' ' } //這裏的it是什麼意思
fun main(args: Array<String>) {
    val oddLength = compose(::isOdd, ::length)// ???
    val strings = listOf("a", "ab", "abc")
    println(strings.filter(oddLength))
}
fun isOdd(x: Int) = x % 2 != 0
fun length(s: String) = s.length
fun <A, B, C> compose(f: (B) -> C, g: (A) -> B): (A) -> C {
    return { x -> f(g(x)) }
}

我的心的

裏面介紹Kotlinr的基礎,還有項目

這篇文章裏面包含一些經常使用的控件,能夠拿來直接用

本身寫過的練習過的stickNalayou

相關文章
相關標籤/搜索