目录

Kotlin系列(三):变量类型自动推导及类型检查

一、前言

  • Kotlin跟Swift其实很像,两者都是支持类型自动推导的。

二、变量的推导

  • kotlin能为我们自动推导变量的类型而不需要我们指定。

  • 示例如下:

      @Test
      fun test7() {
      	var a = 1;
      	println(a::class);
      	println(a::class.java);
      	println(a);
    
      	var b = 1L;
    
      	println(b::class);
      	println(b::class.java);
      	println(b);
    
      	var c = "anjie";
    
      	println(c::class);
      	println(c::class.java);
      	println(c);
    
      	var d = 1.0f;
    
      	println(d::class);
      	println(d::class.java);
      	println(d);
    
      	var e = Date();
    
      	println(e::class);
      	println(e::class.java);
      	println(e);
    
      }
    
  • 运行结果如下:

      int (Kotlin reflection is not available)
      int
      1
      long (Kotlin reflection is not available)
      long
      1
      class java.lang.String (Kotlin reflection is not available)
      class java.lang.String
      anjie
      float (Kotlin reflection is not available)
      float
      1.0
      class java.util.Date (Kotlin reflection is not available)
      class java.util.Date
      Tue Oct 17 12:37:09 CST 2017
    
  • 当然我们也可以通过在变量前明确指定类型,如:var a:Int = 1;

三、类型检查

  • 下面我们以一个小用例来进行说明

      @Test
      fun test8() {
      	var a:Any = Any();
      	println(a::class);
      	println(a::class.java);
      	println(a);
    
      	a = 8;
      	if (a is String){
      		println("a is String")
      	}
      	if (a is Number){
      		println("a is Number")
    
      	}
      	if (a is Int){
      		println("a is Int")
    
      	}
      	println("重新赋值后")
      	a = "anjie";
      	if (a is String){
      		println("a is String")
      	}
      	if (a is Number){
      		println("a is Number")
    
      	}
      	if (a is Int){
      		println("a is Int")
    
      	}
      }
    
  • 运行结果为:

      class java.lang.Object (Kotlin reflection is not available)
      class java.lang.Object
      java.lang.Object@5fdef03a
      a is Number
      a is Int
    
      重新赋值后
      a is String
    
  • 代码解析:

  • 我们可以看到Any是一个Object对象,这个我们暂时先不去理会他,然后给a赋值8。

  • kotlin自动推导其为Int类型,一般是这个,但是Int类型又是Number中的一个子类。所以两个都判断为True

  • Kotlin的类型检查语法非常简单。到目前为止,我们的接触到是点到即止的,后续我们的知识点将会增加,通过从慢到快来学习。