使用Kotlin在ArrayOfNulls中输入不匹配

将我的java代码转换为kotlin时遇到了问题。

这行代码是什么使我的问题

dots = arrayOfNulls<TextView>(layouts.size) 

它说:

类型不匹配。 必需:数组(TextView)? – 发现:数组(TextView?)

让你在这里的整个代码,并希望你可以给我的手,弄清楚什么是错的。

 class WelcomeActivity : AppCompatActivity() { private var viewPager: ViewPager? = null private var myViewPagerAdapter: MyViewPagerAdapter? = null private var dotsLayout: LinearLayout? = null private var dots: Array<TextView>? = null private var layouts: IntArray? = null private var btnSkip: Button? = null private var btnNext: Button? = null private var prefManager: PrefManager? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // Checking for first time launch - before calling setContentView() prefManager = PrefManager(this) if (!prefManager!!.isFirstTimeLaunch) { launchHomeScreen() finish() } // Making notification bar transparent if (Build.VERSION.SDK_INT >= 21) { window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_STABLE or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN } setContentView(R.layout.welcomescreen) viewPager = findViewById(R.id.view_pager) as ViewPager dotsLayout = findViewById(R.id.layoutDots) as LinearLayout btnSkip = findViewById(R.id.btn_skip) as Button btnNext = findViewById(R.id.btn_next) as Button // layouts of all welcome sliders // add few more layouts if you want layouts = intArrayOf(R.layout.welcomescreen_slide1, R.layout.welcomescreen_slide2, R.layout.welcomescreen_slide3, R.layout.welcomescreen_slide4) // adding bottom dots addBottomDots(0) // making notification bar transparent changeStatusBarColor() myViewPagerAdapter = MyViewPagerAdapter() viewPager!!.adapter = myViewPagerAdapter viewPager!!.addOnPageChangeListener(viewPagerPageChangeListener) btnSkip!!.setOnClickListener { launchHomeScreen() } btnNext!!.setOnClickListener { // checking for last page // if last page home screen will be launched val current = getItem(+1) if (current < layouts!!.size) { // move to next screen viewPager!!.currentItem = current } else { launchHomeScreen() } } } private fun addBottomDots(currentPage: Int) { dots = arrayOfNulls<TextView>(layouts.size) val colorsActive = resources.getIntArray(R.array.array_dot_active) val colorsInactive = resources.getIntArray(R.array.array_dot_inactive) dotsLayout!!.removeAllViews() for (i in dots!!.indices) { dots[i] = TextView(this) dots!![i].text = Html.fromHtml("•") dots!![i].textSize = 35f dots!![i].setTextColor(colorsInactive[currentPage]) dotsLayout!!.addView(dots!![i]) } if (dots!!.size > 0) dots!![currentPage].setTextColor(colorsActive[currentPage]) } 

提前致谢。

[编辑]:另外,我注意到在一个for语句错误,在这里:

 for (i in dots!!.indices) { dots[i] = TextView(this) dots!![i].text = Html.fromHtml("•") dots!![i].textSize = 35f dots!![i].setTextColor(colorsInactive[currentPage]) dotsLayout!!.addView(dots!![i]) } 

首先,在第一行表示不解决参考指标 ; 然后在第二行说,点[i]不能聪明地投到'阵列? 因为它是一个可变的属性,并最终在点之前的每一个点后面的行!! [我]说:“只有安全(?)或非空断言(!!)调用允许在一个可空的TextView接收器?

一个空数组基本上是一个数组,每个元素都等于null 。 这意味着你的变量的类型也必须接受空值。 要做到这一点,你需要改变你的变量类型为Array<TextView?>?