lateinitVar无法解析使用来自Kotlin 1.2.10的isInitialized

时间:2017-12-17 23:01:08

标签: android kotlin kotlin-lateinit

我想使用this feature

示例中最简单的事情对我不起作用:

import java.math.*;
import java.util.Scanner;
public class CheckPrimeNumber {
    public static void main(String[] args) 
    {
        int flag=0;
        BigInteger input;
        try{
        Scanner sc= new Scanner(System.in);
        System.out.println("Enter a valid positive number: ");
        String strinput=sc.nextLine();
        input = new BigInteger(strinput);

        sc.close();
        if(input.equals(0) ||input.equals(1)){                      
          System.out.println(input+" is not a prime number.");
            }
        else{
            for(BigInteger i=2; i < input.divide(2); i++){  
                if(input.remainder(2) == 0){
                    System.out.println(input+" is not a prime number.");
                    flag=1;
                    break;                      
                    }
                }
                if(flag==0)
                    System.out.println(input +" is a prime number.");               
            }
        }
    catch(Exception e){
        System.out.println("Please enter only valid positive number: ");
        }
    finally{
        System.out.println("Thank you...!!!");      
        }
    }
}

但我得到了

lateinit val foo = 1
val bar = foo::lateinitVar.isInitialized()

我在Android-Studio(也是那里安装的Kotlin 1.2.10插件)中通过gradle使用Kotlin 1.2.10

1 个答案:

答案 0 :(得分:13)

代码中没有名称为lateinitVar的变量,因此出现错误。再看一下这个例子:

this::lateinitVar.isInitialized

lateinitVar中定义了一个变量this,该函数被调用。示例中的代码段可以展开(列表开头的小加号),如下所示:

class Foo {
    lateinit var lateinitVar: String

    fun initializationLogic() {
        println("isInitialized before assignment: " + this::lateinitVar.isInitialized)
        lateinitVar = "value"
        println("isInitialized after assignment: " + this::lateinitVar.isInitialized)    

    }
}

这可能会更清楚。

另请注意,lateinit无法应用于val,但仅适用于var