首页 > 编程语言 >java单例转kotlin的表现

java单例转kotlin的表现

时间:2022-11-24 13:36:13浏览次数:39  
标签:java val kotlin private instance TestStatic 单例 null notStaticField


java代码

class TestStatic {
private static final String TAG = "TestStatic";
private static TestStatic instance;
private static TestStatic staticField;
private TestStatic notStaticField;

public static TestStatic getInstance() {

if (instance == null) {
synchronized (TestStatic.class) {
if (instance == null) {
return new TestStatic();
}
}
}

return instance;
}

public TestStatic reflect() {

try {
Class<?> aClass = Class.forName(staticField.getClass().getName());
Field[] declaredFields = aClass.getDeclaredFields();
for (Field field : declaredFields) {
field.setAccessible(true);
System.out.println("FIELD:" + field.getName() + "," + TAG);
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return staticField;
}


public static void main() {
TestStatic obj = TestStatic.getInstance();
TestStatic notStaticField = obj.notStaticField;
System.out.println("note" + notStaticField);
}
}

kotlin代码

internal class TestStatic {
private val notStaticField: TestStatic? = null

fun reflect(): TestStatic? {

try {
val aClass = Class.forName(staticField!!.javaClass.name)
val declaredFields = aClass.declaredFields
for (field in declaredFields) {
field.isAccessible = true
println("FIELD:" + field.name + "," + TAG)
}
} catch (e: ClassNotFoundException) {
e.printStackTrace()
}

return staticField
}

companion object {
private val TAG = "TestStatic"
private val instance: TestStatic? = null
private val staticField: TestStatic? = null

fun getInstanceXXX(): TestStatic? {

if (instance == null) {
synchronized(TestStatic::class.java) {
if (instance == null) {
return TestStatic()
}
}
}

return instance
}


fun main() {
val obj = TestStatic.getInstanceXXX()
val notStaticField = obj!!.notStaticField
println("note" + notStaticField!!)
}
}
}

//因为getInstance()刚好和默认获取的事例冲突,所以方法名改了下才解决一键转换错误

在其他kotlin文件中的调用

val obj = TestStatic.getInstanceXXX()
println("hello obj${obj}")

完美

标签:java,val,kotlin,private,instance,TestStatic,单例,null,notStaticField
From: https://blog.51cto.com/u_15458814/5883580

相关文章

  • python进阶(29)单例模式
    初识单例模式 单例模式含义单例模式,也叫单子模式,是一种常用的软件设计模式。在应用这个模式时,单例对象的类必须保证只有一个实例存在。许多时候整个系统只需要拥有一个......
  • Java实现自动取消订单
    摘要Java实现自动取消订单这个功能我实际经验,某医药电商平台的订单管理系统,下单45分钟付款,否者取消。方式一:quartz,每几分钟执行一次(根据订单处理速度,和订单生成情况)。每次......
  • com.alibaba.fastjson.JSONException: can not get javaBeanDeserializer. java.util.
    摘要:SpringBoot接收前端传过来的日期字段解析报错报错信息com.alibaba.fastjson.JSONException:cannotgetjavaBeanDeserializer.java.util.Dateatcom.alibaba.fast......
  • Java之支付宝(电脑网站支付)成功后 同步回调,异步回调验证签名报错解决思路
    摘要:在做支付宝电脑网站支付的接口时候(这里仅限使用支付宝官网提供的SDK接入支付宝支付接口),支付成功了,但是支付宝回调的时候老是报签名失败,经过查看资料,发现是支付宝公钥......
  • 玩转java bytecode第一篇从java到asm的转换。
    java源码publicclassSimpleMain{publicstaticvoidmain(String[]args){System.out.println("333:");}}javap反汇编​​javap-p-c-s-lTestAsmTra......
  • kotlin
    varemail=null;email?:println("emailisempty");email?.let{println("emalinotempty");}varcurrent=email?.let{"nihao"}?:"notifuckiamnull";println(......
  • javascript:void() 和 herf="#" 区别
    javascript:void(0)和herf="#"区别本文内容参考菜鸟教程(大部分都是原文内容)原文地址javascript:void(0)的含义我们经常会使用到javascript:void(0)这样的代码......
  • Java 设计模式:装饰器模式
    目录装饰器模式(DecoratorPattern)概述实现业界实践装饰器模式(DecoratorPattern)概述所属:结构型模式,作为现有的类的一个包装。适用时机:扩展某个类的时候。不使用子类继......
  • DAY06_Java方法
    d06Java方法(p45-p50)1.什么是方法?System.out.println() 类.对象.方法()调用系统类System中的标准输出对象out中的println()方法Java方法是语句的集合,它们在一起执......
  • Java工具类
    BeanUtils.copyProperties排除null属性的copyimportcom.hourumiyue.system.SpringUtil;importorg.springframework.beans.BeanUtils;importorg.springframework.b......