我见过很多教程,但仍然没有得到它的工作原理。 我明白了一个主要想法:一个函数用数据保存函数,但是看官方文档,我不知道数据存储的方式和位置,以及调用负责存储数据的函数。 其他教程似乎只显示了一小段代码,这对我没有多大帮助。 你能给我一个完整和简单的例子,像一个人,一个微不足道的类,请吗?
我有两个扩展方法 函数A是: fun Activity.postDelay1s(run: () -> Unit) { Handler().postDelayed({ run() }, 1000) } functionB是: fun CustomRefreshLayout.setUp(containerRecycleView: RecyclerView, onResfresh: () -> Unit) { with(this) { recyclerView = containerRecycleView setColorSchemeColors(Color.BLUE, Color.GREEN, Color.YELLOW, Color.RED) setDistanceToTriggerSync(300) setProgressBackgroundColorSchemeColor(Color.WHITE) setSize(SwipeRefreshLayout.LARGE) setOnRefreshListener { onResfresh() } } } 当我调用函数时a我使用这种方式postDelay1s { initData() } ,但调用b我需要使用这种方式swipe.setUp(trade_list, this::initData) 。 我想在这两个扩展函数this::initData之间的initData()来区别
通常我发现自己处于一个拥有大量可选参数的超类的情况,这些相同的参数在其子类中也需要是可选参数。 例如,超类: abstract class Plugin(val name: String, val version: String = “1.0”, val author: String = “”, val description: String = “”) 扩展这个类是一个痛苦。 这是一个例子子类: abstract class CyclePlugin(name: String, version: String = “1.0”, author: String = “”, description: String = “”, val duration: Int, val durationUnit: TimeUnit = MILLISECONDS) : Plugin(name, version, author, description) 注意:我将用我的解决方案回答这个问题。 我正在寻找更好的解决方案。
我注意到下面的Kotlin代码编译和执行成功: for (i in 1..2) { val i = “a” print(i) } 这打印一个。 但是,我没有find允许这种可变阴影的决定的理由。 我会说这不是一个好的做法,甚至在Java中也是被禁止的。 我认为Kotlin设计人员在改进Java语法方面做了很多工作,并将其应用于日常实际应用,所以我必须在这里错过一些东西?
我有一个Guice Module提供一个List使用@Provides方法。 class TestModule() : Module { override fun configure(binder: Binder) {} @Provides fun getStrings(): List = listOf(“foo”, “bar”) } class Test { @Test fun `provider can not deliver`() { val injector = Guice.createInjector(TestModule()) injector.getInstance(object : Key<List>() {}) } } 但是,测试失败: 1) No implementation for java.util.List was bound. while locating java.util.List 现在,这似乎是这个问题相同,但我不知道在哪里添加@JvmSuppressWildcards注释; 将它添加到getStrings()方法不会改变任何东西,就像在getInstance()调用中将其添加到object 。 我如何让Guice做我想做的事?
为了简单的检查 if (variable != null) { doSomething(variable) } 我们可以改变 variable?.let { doSometing(it) } 但对于其他情况 if (variable != null) { doSomething(variable) } else { doOtherThing() } 在单一function中是否有这样做的方法? 有没有像这样的东西?
我试图比较2个地图,两个填充相同的字符串(仅用于培训)。 当我尝试比较它们时,我通过map.equals(map2)返回false 但是,如果我这样做,并将.toString()添加到comparison它返回true 。 map.toString().equals(map2.toString()) 怎么样? 我究竟做错了什么? Kluent library及其shouldEqual方法Kluent library发生同样的情况。 我也尝试将该maps values存入arrays并试图比较这些arrays但仍然返回false 。 此外,当我打印每个地图的所有项目,我看到相同的3个字符串,但比较返回fail 。 代码如下: class MapsTesting { class Items(name1: String, amount1: String, price1: String) { var name: String = name1 var amount: String = amount1 var price: String = price1 override fun toString(): String { return “name:$name,amount:$amount,price:$price \n” } } @Test fun mapTest() […]
我有两个ArrayList 我想要一种方法来合并两个ArrayList在1个新的ArrayList
Android Studio的Kotlin插件更新后,它停止工作。 插件被自动禁用。 下面的错误,我越来越。 com.intellij.openapi.extensions.impl.PicoPluginExtensionInitializationException: Duplicate registration for EP: org.jetbrains.uast.uastLanguagePlugin: original plugin com.intellij, new plugin org.jetbrains.kotlin at com.intellij.openapi.extensions.impl.ExtensionsAreaImpl.registerExtensionPoint(ExtensionsAreaImpl.java:286) at com.intellij.openapi.extensions.impl.ExtensionsAreaImpl.registerExtensionPoint(ExtensionsAreaImpl.java:128) at com.intellij.ide.plugins.IdeaPluginDescriptorImpl.registerExtensionPoints(IdeaPluginDescriptorImpl.java:328) at com.intellij.ide.plugins.PluginManagerCore.registerExtensionPointsAndExtensions(PluginManagerCore.java:1352) at com.intellij.ide.plugins.PluginManagerCore.initializePlugins(PluginManagerCore.java:1264) at com.intellij.ide.plugins.PluginManagerCore.initPlugins(PluginManagerCore.java:1393) at com.intellij.ide.plugins.PluginManagerCore.getPlugins(PluginManagerCore.java:121) at com.intellij.openapi.components.impl.ComponentManagerImpl.getComponentConfigs(ComponentManagerImpl.java:302) at com.intellij.openapi.components.impl.ComponentManagerImpl.init(ComponentManagerImpl.java:95) at com.intellij.openapi.application.impl.ApplicationImpl.load(ApplicationImpl.java:425) at com.intellij.openapi.application.impl.ApplicationImpl.load(ApplicationImpl.java:411) at com.intellij.idea.IdeaApplication.run(IdeaApplication.java:206) at com.intellij.idea.MainImpl$1.lambda$null$0(MainImpl.java:49) at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:762) at java.awt.EventQueue.access$500(EventQueue.java:98) at java.awt.EventQueue$3.run(EventQueue.java:715) at java.awt.EventQueue$3.run(EventQueue.java:709) at java.security.AccessController.doPrivileged(Native Method) […]
我从JavaScript的背景尝试学习一些Kotlin。 我知道我可以通过定义我的function fun add(a: Int , b: Int): Int{ return a+b } 我正在尝试这个 val add = { a:Int,b:Int-> println(“I am calculating the sale => no body you guy [$x+$y]”); //works } val add = { a:Int ,b : Int -> //How do i return from this function } 另外这是一个正确的方式来定义Kotlinfunction? 和第一种方式有什么不同?