Tag: kotlin extension

Kotlin扩展函数突然需要api等级24

我只注意到这个lint错误:调用需要Api级别24(当前最小值是19)java.util.map#foreach当我在Kotlin的MutableMap上使用扩展函数forEach。 我写这行的时候并没有发生,但现在呢。 而即时通讯没有看到我的其他机器上的这个错误。

如何在类文件中放置Kotlin扩展?

也许这个问题是在官方文档中回答的,但是我没有看到它… 在Swift中,我们习惯写类似的东西 class Jazz { … } extension Jazz { func swing() { … } } 并把整个代码片段放在一个文件中,比如Jazz.swift 。 我们似乎无法在科特林做相应的事情? 我总是发现自己的自我写作,例如一个Jazz.kt和一个JazzExtensions.kt ,这并不总是构建代码的最清晰的方式。 对此的任何输入赞赏。

创建Kotlin对象的新实例

我有一个对象QuickSort ,我试图创建2个实例。 当我尝试创建2个单独的实例时,我可以看到它只使用一个实例,因为我在QuickSort类中有一个不准确的计数。 Kotlin在语法上不使用新的,所以我怎么去解决这个问题呢? object QuickSort { var count = 0; quickSortOne(…){ … count++ … } quickSortTwo(…){ … count++ … } } 这里是我如何创建我的2个实例。我的目标是让quickSort1和quickSort2是2个独立的实例。 var quickSort1 = QuickSort quickSort1.quickSortOne(…) var quickSort2 = QuickSort quickSort2.quickSortTwo(…) 尝试解决方案 :将QuickSort从对象转换为类。 这仍然导致使用相同的实例,如包含第一次调用计数的第二种方法的计数所示。 class QuickSort { var count = 0; quickSortOne(…){ … count++ … } quickSortTwo(…){ … count++ … } } … […]

什么是这个java代码相当于kotlin

以下java代码的等价kotlin是什么: F f=new F(); convert(f, HashMap.class); 这是我迄今为止所尝试的 val f = F() convert(f, HashMap<*, *>::class.java) 这是我得到的错误: 只有类允许在类文字的左侧

如何解决kotlin中通用扩展方法的签名,以解决kotlin中的“类型推断失败”

我已经创建了扩展方法: @Suppress("UNCHECKED_CAST") operator fun <T : View> View.get(@IdRes id:Int): T = this.findViewById(id) as T 这种方法的主要用法: class A { lateinit var text: TextView fun init(view:View) { text = view[R.id.text] } } 这工作完美,但是当我尝试使用它没有变量: fun test() { view[R.id.text].visibility = View.GONE // error } 错误: Type inference failed: Not enough information to infer parameter T in operator fun <T […]

Android SDK类上的Kotlin扩展函数的单元测试

Kotlin扩展功能非常棒。 但是我怎么能对它们进行单元测试呢? 尤其是那些Android SDK提供的类(如Context,Dialog)。 我在下面提供了两个例子,如果任何人都可以分享我可以如何进行单元测试,或者如果我真的想单元测试它们,我需要以不同的方式编写它们。 fun Context.getColorById(colorId: Int): Int { if (Build.VERSION.SDK_INT >= 23) return ContextCompat.getColor(this, colorId) else return resources.getColor(colorId) } 和 fun Dialog.setupErrorDialog(body : String, onOkFunc: () -> Unit = {}): Dialog { window.requestFeature(Window.FEATURE_NO_TITLE) this.setContentView(R.layout.dialog_error_layout) (findViewById(R.id.txt_body) as TextView).text = body (findViewById(R.id.txt_header) as TextView).text = context.getString(R.string.dialog_title_error) (findViewById(R.id.txt_okay)).setOnClickListener{ onOkFunc() dismiss() } return this } 任何建议将有所帮助。 谢谢!

kotlin是功能性的还是程序性的?

除了面向对象,它可以支持程序和函数式编程风格吗? 我想开发一个使用Android Studio的Android应用程序,这样我就可以探索kotlin提供的各种编程风格,这将真正帮助我探索这种新的语言。 感谢您抽出宝贵的时间阅读/回答这个问题,对不起,如果我听起来noob,因为我是一个编程世界的初学者!

Android Kotlin Extension超级通话

我是一个Java Android开发人员,我正在接近Kotlin 我已经定义了以下类: open class Player : RealmObject() { … } 我定义了以下两个扩展,一个用于通用RealmObject类,另一个用于特定的Player类: fun RealmObject.store() { Realm.getDefaultInstance().use { realm -> realm.beginTransaction() realm.copyToRealmOrUpdate(this) realm.commitTransaction() } } fun Player.store(){ this.loggedAt = Date() (this as RealmObject).store() } 我想要的是,如果我在任何RealmObject对象上调用RelamObject.store()则将调用RelamObject.store()扩展名,但是如果我在Player实例上调用RelamObject.store()将被调用的扩展名将是Player.store() 。 (现在没问题)我不想复制粘贴相同的代码,我喜欢写更少的重用。 所以我需要在内部的Player.store()将调用通用的RealmObject.store() 我知道了。 我写在那里的代码实际上按预期工作:D 我所问的是(仅仅因为我个人直觉而写的): 这是好方法吗? 还是有更好的办法? 谢谢

在Kotlin的自定义类中访问TextView

我是Android和Kotlin的新手,我面临着一个我无法解决的问题。 我有一个activity_main.xml文件,其中包含一个seekBar和一个TextView 。 当我改变seekBar我想在TextView实时显示更改的值。 为了学习新事物和练习Kotlin,我创建了一个包含Seekbar.OnSeekBarChangeListener的新类,该类对seekBar变化作出反应。 但问题是,当我把TextView设置为新的seekBar值,这是一个findViewById NullPointException 。 FATAL EXCEPTION: main Process: kotlindemo1.kristof.kotlin_1demo, PID: 24410 java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.Window.findViewById(int)' on a null object reference at android.app.Activity.findViewById(Activity.java:2090) at kotlindemo1.kristof.kotlin_1demo.seekB._$_findCachedViewById(seekB.kt:0) at kotlindemo1.kristof.kotlin_1demo.seekB.onProgressChanged(seekB.kt:15) at android.widget.SeekBar.onProgressRefresh(SeekBar.java:93) 这是MainActivity类: package kotlindemo1.kristof.kotlin_1demo import android.app.Activity import android.os.Bundle import kotlinx.android.synthetic.main.activity_main.* open class MainActivity : Activity() { override fun onCreate(savedInstanceState: Bundle?) […]

无法使用Kotlin访问EditText或其他UI组件

我正在使用Android Studio 3.0 RC2&Kotlin。 当我尝试访问一个UI组件时,应用程序崩溃,除非我先写findViewById。 我以为Kotlin应该摆脱不得不写的findViewById线? 用户界面是一个fragment ,我试图从相同的fragment代码访问。 有没有办法不必写findViewById? 这些线路工作: var userNameField = view?.findViewById<EditText>(R.id.userNameTextField) as EditText userNameField.setText("hello world") 没有findViewById行这行不工作 userNameTextField.setText("hello world") 我什至有 import kotlinx.android.synthetic.main.fragment_sign_in.* onCreateView()代码: override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? { // Inflate the layout for this fragment var view = inflater!!.inflate(R.layout.fragment_sign_in, container, false) var userNameField = view?.findViewById<EditText>(R.id.userNameTextField) as EditText userNameField.setText("hello […]