为什么必须调用类成员函数types?

fun test() { class Test(val foo: ((Double, Double) -> Double)?) val test = Test(null) if(test.foo != null) test.foo(1.0, 2.0) } 上面的代码生成错误: Kotlin:引用有一个可为空的types’((Double,Double) – > DoubleArray)?’,使用显式的’?.invoke()’来代替函数式的调用。 如果我按照错误的建议,并将调用更改为test.foo?.invoke(1.0, 2.0) ,代码编译,但IntelliJ现在报告 types为’((Double,Double) – > DoubleArray’)的非空接收者进行不必要的安全调用 遵循这个建议,我结束了test.foo.invoke(1.0, 2.0) ,我认为它可以与test.foo(1.0, 2.0) )互换。 为什么这里不是这种情况? 当foo不是class级成员时,事情就像我期望的那样工作: fun test2() { val foo: ((Double, Double) -> Double)? = null if(foo != null) foo(1.0, 2.0) […]

数据类toString,等得到优化的proguard?

Kotlin有这样一个data class ,它提供了像提供自动toString ,等等方便的function。但是如果我们不使用这些函数,它们会被proguard优化掉吗? 我问,因为我想知道如果我们应该谨慎使用data class (例如,我们不使用toString ,等等,我们不应该使用数据类,而是普通的类,即使他们是模型类.. )

我怎样才能通过在活动模板中的types自动命名variables?

使用匕首,林注入领域很多 – 所以我创建了一个活的模板声明一个注入的variables: @Inject lateinit var $var$: $TYPE$ 在Java中,当我指定types为Repository ,类似的活动模板会自动填充存储 Repository 。 但是在Kotlin中 – 事实并非如此。 但我确定它可能吗?

Intellij Idea kotlin不能自动导入一些运算符函数,例如+

例如: 类common.number.Number.kt : operator fun Int.plus(other: BigInteger): BigInteger { return BigInteger(this.toString()).add(other) } Class common.test.Test.kt : var i = 1 + BigInteger(“1”) 然后,Intellij Idea在Test.kt类中显示错误。 但是,如果我添加以下导入,错误消失: import common.number.Number.plus 我怎样才能让IntelliJ Idea自动导入这个操作函数?

Android Studio 3.1 canary 8不能停在Junit测试的断点处

就像标题所说的那样,我在试图调试JUnit测试时无法在断点上停下来。 我得到的唯一可视提示是当调试器附加时,我所有的断点都显示为“x” 这是这个版本的已知问题吗? 还是我必须采取额外的步骤才能使其工作? 更新: 好的,我发现在JAVA上的测试可以被任何断点阻止,但是当Kotlin类(在我的java测试中被调用)上设置断点时,它们不起作用。 而当测试在Kotlin上时,断点根本不起作用。

Kotlin抽象通用视图持有者的一类types的争论

我试图创建一个RecyclerView.Adapter与以下内容: 查看持有人 – 提供了抽象的父母和一个儿子 abstract class BaseSettingsViewHolder(var viewDataBinding : ViewDataBinding) : RecyclerView.ViewHolder(viewDataBinding.root) { abstract fun onBind(data: T, presenter: ISettingsPresenter, position: Int) } class SettingsTitleViewHolder(viewDataBinding: ViewDataBinding) : BaseSettingsViewHolder(viewDataBinding) { override fun onBind(data: TitleData, presenter: ISettingsPresenter, position: Int) { viewDataBinding.setVariable(BR.titleData, data) viewDataBinding.setVariable(BR.itemPosition, position) viewDataBinding.setVariable(BR.settingsPresenter, presenter) viewDataBinding.executePendingBindings() } } 当试图声明适配器时: class SettingsAdapter(var context: Context, var presenter: ISettingsPresenter) : […]

处理android kotlin中的click事件:setOnClickListener只有在双击时才起作用

我在DialogFragment中有一个按钮可以返回到另一个活动。 但只有双击时才能使用。 我正在用尽想法。 在我的XML文件中,我已经尝试了以下(以不同的方式组合,但没有一个工作) 我的整个片段的XML文件 至于我的DialogFragment,我试图把我的setOnClickListener放在onViewCreated()方法里面,然后放在onStart()里面和onResume()方法里面。 它只在双击时才能工作。 我也有一个计时器,让对话在10秒后消失,然后把我带到我想要的活动,所以这不是一个问题,但我真的需要并想要解决它。 如果我将计时器设置为5秒或更低,当然,它给人的印象是按钮一次点击,但实际上没有。 class PaymentDoneDialogFragment : DialogFragment() { private lateinit var mYesBtn: Button private lateinit var mActionYes: () -> Unit override fun onViewCreated(view: View, @Nullable savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) dialog.setCanceledOnTouchOutside(false) dialog.window.requestFeature(Window.FEATURE_NO_TITLE) dialog.window.setDimAmount(.85f) dialog.window.setFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE) dialog.setCancelable(false) dialog.setCanceledOnTouchOutside(false) dialog.window.decorView.systemUiVisibility = activity?.window!!.decorView.systemUiVisibility dialog.window.clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE) mDialogTitle = view.find(R.id.tv_payment_done_title) if (mTitle != null) { […]

如何在Kotlin中实现一个需要另一个属性的懒惰属性?

我需要一个矩形,需要在通话中初始化。 这是我的代码; class EpheButton private constructor( private val text: String, private val x: Float, private val y: Float, private val projectionMatrix: Matrix4) : Disposable { private val spriteBatch: SpriteBatch = SpriteBatch() private val bitmapFont: BitmapFont = BitmapFont() private val shapeRenderer: ShapeRenderer = ShapeRenderer() private val textWidth: Float private val textHeight: Float private val rectangle :Rectangle […]

如何在Kotlin中制作一个双向转换器? (在Java中工作)

我得到这个错误: 错误:(32,50)在类br.com.martinlabs中找不到方法indexFromModel(android.databinding.ObservableList ,br.com.martinlabs.usecase.model.GrupoDoPrincipal) .usecase.viewtools.Converters 但是我在Converters上有这个方法:(我已经尝试了一个类中的伴随对象) object Converters { fun indexFromModel(list: ObservableList, model: GrupoDoPrincipal): Int { return list.indexOfFirst { it?.id == model?.id } } @InverseMethod(“indexFromModel”) fun indexToModel(list: ObservableList, index: Int): GrupoDoPrincipal { return index.let { list[it] } } } 用法: 这个方法适用于Java: public static int indexFromModel(ObservableList list, GrupoDoPrincipal model) { for (int i = 0; i < […]

DigestUtils.md5Hex()在传递String对象时会生成错误的哈希值

我正在尝试使用org.apache.commons.codec的DigestUtils类在Kotlin中生成md5哈希。 这是测试代码 @Test fun md5Test(){ val userPassword: String = “123” val md5Hash: String = “202cb962ac59075b964b07152d234b70” assertEquals(md5Hash, DigestUtils.md5Hex(userPassword)) } 问题是,当我运行这个测试失败,并说生成的MD5散列是28c1a138574866e9c2e5a19dca9234ce 但是…当我通过字符串值而不是对象 assertEquals(md5Hash, DigestUtils.md5Hex(“123”)) 测试通过没有错误 为什么发生这种情况?