• Kotlin之类属性延迟初始化


    类属性延迟初始化

    在Android中声明UI类型变量,由于Kotlin的类型安全机制必须进行初始化,比如:

    Java:

     1 public class TestActivity extends AppCompatActivity {
     2 
     3     private TextView mTvNmae;
     4 
     5     @Override
     6     protected void OnCreate(Bundle savedInstanceState) {
     7         super.onCreate(savedInstanceState);
     8         setContentView(R.layout.activity_main);
     9 
    10         mTvNmae = findViewById(R.id.name);
    11     }
    12 }

    Kotlin:

    解决方法1 初始化为Null:

     1 class MainActivity : AppCompatActivity() {
     2 
     3     private var mTvName: TextView? = null
     4 
     5     override fun onCreate(savedInstanceState: Bundle?) {
     6         super.onCreate(savedInstanceState)
     7         setContentView(R.layout.activity_main)
     8 
     9         mTvName = findViewById(R.id.name)
    10     }
    11 }

    初始化问题解决了,但是使用上非常不友好。

    解决方法2 延迟初始化:

     1 class MainActivity : AppCompatActivity() {
     2 
     3     private lateinit var mTvName: TextView
     4 
     5     override fun onCreate(savedInstanceState: Bundle?) {
     6         super.onCreate(savedInstanceState)
     7         setContentView(R.layout.activity_main)
     8 
     9         mTvName = findViewById(R.id.name)
    10     }
    11 }

    这方式也解决了初始化问题,就是mTvName是一个可变类型变量,在初始化后基本上不会改变变量的赋值了。

    解决方法3 延迟初始化 lazy (推荐方式):

     1 class MainActivity : AppCompatActivity() {
     2 
     3     private val mTvName: TextView by lazy {
     4         findViewById(R.id.name)
     5     }
     6 
     7     override fun onCreate(savedInstanceState: Bundle?) {
     8         super.onCreate(savedInstanceState)
     9         setContentView(R.layout.activity_main)
    10     }
    11 }
  • 相关阅读:
    flink RECEIVED SIGNAL 15: SIGTERM. Shutting down as requested
    hive 正则
    scala.sys.process
    python多版本管理
    行式存储和列式存储
    Windows Latex 中日文字体设置例
    perl笔记
    wordpress plugins collection
    【转载】Windows 7下使用bcdedit删除多余启动项的命令
    修改MySQL密码
  • 原文地址:https://www.cnblogs.com/naray/p/12992772.html
Copyright © 2020-2023  润新知