Kotlin当多个值不工作时值是一个Android视图

我实现了anko递归应用的函数: fun applyTemplateViewStyles(view: View) { when(view) { is EditText, TextView -> { …. } } } 我收到一个错误,说“函数调用’TextView(…)”预计“ 因为我可以写一个子句,如0,1,为什么我不能做一个Android视图相同?

什么是Kotlin中的typealias,它在这个实现中是如何被使用的?

我看到有一个正在使用的typealias关键字,然后在这个“type”上调用invoke方法 有人可以提供洞察这是什么以及如何使用? typealias NewKittiesReceived = (Kitty) -> Unit class KittyRepository { private val timer = Timer() private val random = Random() private val period = TimeUnit.SECONDS.toMillis(1) internal fun receiveNewKitties(newKittiesReceived: NewKittiesReceived) { timer.schedule(object : TimerTask() { override fun run() { val nameRandom = random.nextInt(KittyNames.values().size) val ageRandom = random.nextInt(5) newKittiesReceived.invoke(Kitty(KittyNames.values()[nameRandom].name, ageRandom)) } }, period, period) } }

Kotlin的尺寸从6变为2?

试着自己运行,如果它给出了预期的输出,即Length: 5然后告诉我什么问题,如果它给出了我的相同的输出,然后告诉我在我的代码中犯了错误… 并运行这个程序没有这两行,我已经在代码中提到你会有预期的输出。 码: fun main(args: Array) { var list1: MutableList = mutableListOf(1,2,3,4,5) list1.add(6) println(“Length: ${list1.size}”) // Problem is in these 2 lines var list3 = list1.subList(0,3) // Line no. 1 list3.clear() // Line no. 3 list1.remove(5) println(“Length: ${list1.size}”) list1.forEach{n -> println(n)} } 这是输出: Length: 6 List 3: 1 List 3: 2 List 3: 3 […]

Kotlin Android扩展缓存合成属性还是每次调用findViewById()?

如果我有一个简单的自定义视图: myitem.xml 访问一个kotlinx syntentic属性: import kotlinx.android.synthetic.main.myitem.view.* view.toolbar.text = “Some text” 它在内部生成对findByViewID()的调用。 所以我的问题是: 结果缓存为自定义视图像活动或每次每次调用findByViewID被调用? 性能方面的原因,答案非常重要。

为什么使用块不能安全地初始化一个var?

为什么这给编译错误? val autoClosable = MyAutoClosable() var myVar: MyType autoClosable.use { myVar= it.foo() } println(myVar) // Error: Variable ‘myVar’ must be initialized 也许编译器只是把{ myVar= it.foo() }作为一个函数传递给另一个函数,并且不知道什么时候,甚至是否会被执行? 但是由于use不仅仅是一个函数,而且Kotlin已经替代了Java的“试用资源”,关于它的一些特殊的知识将是适当的,不是吗? 现在,我不得不用一些虚拟的价值初始化myVar ,这完全不符合Kotlin的精神。

如何从kotlin中的伴随对象调用父方法

我有一个超级class: open class A { fun doStuff() { } } 然后我有一个子类扩展: class B: A() { companion object { doStuff() //compile error } } 我怎样才能从同伴对象调用我的doStuff()方法?

Kotlin || RecycleView项目不会膨胀:RecycleView.Adapter的每个重写方法上的无法访问的代码

我正在Kotlin创建自定义Recycleview 我没有得到代码中的任何exception,它运行完美,但担心的是该项目不会出现在Recycleview上, Recycleview代码在Adapter类中是无法访问的。 Waring: – RecycleView适配器的重写方法上无法访问的代码。 请检查我的Adapter和Activity类 适配器类 class CustomRecycleAdapter(val data: ArrayList) : RecyclerView.Adapter() { override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): ViewHolder { TODO(“not implemented”) //To change body of created functions use File | Settings | File Templates. val v = LayoutInflater.from(parent?.context).inflate(R.layout.recycle_item, parent, false) return ViewHolder(v) } override fun getItemCount(): Int { TODO(“not implemented”) //To […]

Android Studio 3无法建立kotlin片段

我试图使用Android Studio 3.0与我现有的项目Kotlin。 我用kotlin创建了一个片段。 我试图在我的Java活动中使用kotlin片段。 但每次我尝试运行它,我都会得到 Error:(209, 5) error: cannot find symbol class BlankFragment BlankFragment.kt import android.content.Context import android.net.Uri import android.os.Bundle import android.support.v4.app.Fragment import android.view.LayoutInflater import android.view.View import android.view.ViewGroup class BlankFragment : Fragment() { // TODO: Rename and change types of parameters private var mParam1: String? = null private var mParam2: String? = null private […]

Intellij在构建时崩溃Java

我想尝试一下Intellij,从头开始做一个新的安装。 我已经在C:\Program Files\Java (没有版本化的子文件夹)下直接安装了一个64位的JDK 9.0.4,并将系统variablesJAVA_HOME设置为C:\Program Files\Java 。 我使用Intellij的64位执行,而没有改变一个单一的默认设置。 用一个模块创建一个新项目。 当我点击构建时,我从Windows 7得到一条消息,说Java已经崩溃了。 一个问题导致程序停止正常工作。 请关闭程序。 我没有这个Eclipse的问题,并没有在其他电脑上。 这是Intellij的消息: 错误:构建过程终止exception:“C:\ Program Files \ Java \ bin \ java”-Xmx700m -Djava.awt.headless = true -Djdt.compiler.useSingleThread = true -Dcompile.parallel = false -Drebuild.on.dependency .change = true -Djava.net.preferIPv4Stack = true -Dio.netty.initialSeedUniquifier = 1184107480578887608 -Dfile.encoding = windows-1252 -Duser.language = de -Duser.country = DE -Didea.paths.selector = IdeaIC2017.3 […]

Kotlin:检查if语句中的可为空的值是否有效

理想情况下,我认为评论性的陈述更有意义,至少对我而言。 我的意思是,如果有人问我,如果null大于0,我会回答不。 或者如果null是真的,那么也没有。 但是那些没有按照我的预期工作,并抛出编译错误。 所以,我改变了下面这些。 但是那些看起来不好或简洁。 有没有更好的方法来处理这些? class Result(val code:Int) { } fun getResult():Result? { return null; } fun main(args: Array) { var result = getResult(); var success:Boolean? = null; //if(result?.code > 0) if(result?.code?:0 > 0) { print(“Good.”); } //if(success) if(success == true) { print(“Good.”); } }