kotlin中单例类与静态方法

kotlin中内部类和单例类用object修饰,java代码如下:

class Demo {
    private static class SingletonHolder {
        private static Demo instance = new Demo();
    }
}

转化为kotlin代码如下:

internal class Demo {
    private object SingletonHolder {
        private val instance = Demo()
    }
}

处理单例时,object会使得整个类都是单例的,类中的所有可访问方法都可以通过类似静态方法调用那样通过类名+方法名访问,如果只是想让部分方法按照静态方法样式访问,可以使用companion object,java代码如下:

public class MainActivity2 extends AppCompatActivity {
    private static final String TAG  = "MainActivity2";
    private static final int NUM = 99;
    private static int NUM2 = 99;
    private int NUM3 = 99;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
    }

    public static void printData(){
        Log.d(TAG, "printData: ");
    }

    public void printData2(){
        Log.d(TAG, "printData2: ");
    }

    public static String getData(){
        return System.currentTimeMillis()+"";
    }

}

转化为kotlin代码如下:

class MainActivity2 : AppCompatActivity() {
    private val NUM3 = 99
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main2)
    }

    fun printData2() {
        Log.d(TAG, "printData2: ")
    }

    companion object {
        private const val TAG = "MainActivity2"
        private const val NUM = 99
private const val NUM2 = 99
fun printData() {
    Log.d(TAG, "printData: ")
}

        val data: String
            get() = System.currentTimeMillis().toString() + ""
    }
}

可以看到static修饰的java方法和变量都被放到了companion object代码块中了。

由于kotlin中已经有了常量修饰符val,companion object代码块以及顶层类变量推荐加上const关键字,android studio也会提示开发者添加const关键字

上面的companion object以及objec虽然可以以静态方法的形式访问方法,但实际是通过静态内部类实现的,方法并非静态方法,实现静态方法需要在companion object或者objec类中添加@JvmStatic注解。

class Single {
    companion object{
        @JvmStatic
        fun getData(){

        }

        fun getName():String{
            return ""
        }
    }
}

扫描二维码关注公众号,回复: 13121840 查看本文章

猜你喜欢

转载自blog.csdn.net/u013795543/article/details/113952047
今日推荐