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 ""
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值