码迷,mamicode.com
首页 > 其他好文 > 详细

Kotlin之类属性延迟初始化

时间:2020-05-30 15:27:55      阅读:72      评论:0      收藏:0      [点我收藏+]

标签:you   private   err   问题   stat   rri   roi   类型   ext   

类属性延迟初始化

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

 

Kotlin之类属性延迟初始化

标签:you   private   err   问题   stat   rri   roi   类型   ext   

原文地址:https://www.cnblogs.com/naray/p/12992772.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!