伴随对象的简单样本类 class MyClass{ companion object{ val test = 25 } } 值测试可以通过MyClass.test访问,但是如何从MyClass的实例访问? 如果我有val sample = MyClass() ,那么我如何从样本访问测试? sample::class.test是不正确的….有没有办法? 提出的问题是:为什么不简单地使用MyClass.test? 我更喜欢把问题保持在“如何”而不是“为什么”,但是因为有人问我会尝试“为什么”。 这同样适用于这些方法。 为什么不在类中有静态函数,只需调用Class.function()并将对象作为参数之一传递? 考虑使用作为更抽象的基类传递的对象时,您正在使用的对象有几个可能的类。 你可以做一个switch和每个possbile类,并以适当的方式访问相应类的值(或函数),但多态的想法是你应该能够访问类的方法(即使函数方法代码对于同一个类的所有成员而言),或者是来自该类的一个对象实例的所有类的成员共有的值。 到目前为止,我的解决方案是简单地实现相当于MyClass的静态测试 public class MyClass { static Integer test = 25; public Integer testGetter(){ return test;} } 在Java,C ++,python等中有这样简单的解决方案…(我将提供代码样本,这对每个人都有帮助),我想在kotlin中会比使用Java更好的解决方案。 kotlin伴侣对象提供了静态的替代(有优势),用于在没有对象实例的情况下访问类属性的情况(如工厂),但是在对象实例可用的情况下还有另外一种静态的用法,静态是合适的,因为单个属性可以被类的所有成员共享,并且该属性不是实例相关的。
这个问题可能是愚蠢的,但是…为什么? 就我个人而言,我喜欢微软风格,其中{与匹配列在同一列}。 在我用过的所有语言中,{放置的位置并不重要。 但是在Kotlin中,只有这样才行。 image_view.viewTreeObserver.addOnGlobalLayoutListener{ }; 这会导致错误。 image_view.viewTreeObserver.addOnGlobalLayoutListener { };
我有一对夫妇object ,如object Buffer ,提供确定的function,我想打电话 binding(bufferName[Buffer.VERTEX] to GL_ARRAY_BUFFER) { … // calling Buffer functions } 在里面我有可用的,例如,由于GL_ARRAY_BUFFER object Buffer的function binding目前是这样定义的 inline fun binding(pair: Pair, block: T.() -> R) 所以我的问题是,如果有可能“铸造”T基于pair.second特定对象,以便我可以调用对象提供的那些function?
想象一下,在你的基于Kotlin的项目中,你有一个超级重要和广泛使用的类。 它有唯一的定义如下的构造函数: class MyAwesomeManager(argOne: String, argTwo: String) 出于某种原因,您需要快速查找其构造函数的所有用法。 您正在使用Android Studio(或Intellj IDEA)。 但是…按Ctrl + LMB的名字会产生大量的垃圾结果 – 在导入,伴侣对象的字段调用等方面的使用。一个类的所有用途,但不是构造函数 。 将光标放在名称上并按Alt + F7也是一样 。 那么,我怎样才能find这个主要构造函数的所有用途呢?
我有一个公开可见的Int来保存当前的应用程序主题。 var themeId: Int = R.style.AppTheme private set 如果我注释@StyleRes的值 @StyleRes var themeId: Int = R.style.AppTheme private set 我得到一个警告 这个注解不适用于voidtypes; 预计整数或长 如果我将variables更改为val ,则不会显示错误。 我也可以通过添加@JvmField注释来消除这个错误,但是这样做会消除私有设置者的能力。 我是否错误地使用了注释,或者这是Android Studio上Kotlin的问题? 编辑: 吸气剂可以被注释 var themeId: Int = R.style.AppTheme private set @StyleRes get
当IntelliJ IDEA检测到我将一段复制的Java代码粘贴到一个Kotlin文件中时,它提供给我将粘贴的Java转换为Kotlin。 这个对话框包含一个“不要再次询问下一次”checkbox。 我选中了这个框,并选择“是”,但现在我想撤消我的默认选择。 我该怎么做呢? 我在IntelliJ IDEA的首选项中查找和搜索过,但还没有find相应的checkbox。 它实际上是在设置,还是我可以以某种方式重置默认checkbox选择?
在我们的Android应用程序中,我们使用DBFlow访问SQLite数据库。 我们通过Kotlin引用由DBFlow生成的类。 我们已经意识到这样一个事实,即我们拥有Java中的模型类和数据库类,因为在Kotlin中编写这些类时代码生成将不起作用 。 不过,在每个项目清理完毕后,我们仍然需要两次构建代码。 在设备上执行第一个构建会导致看似随机的Kotlin类的ClassNotFoundExceptions (即使它们不访问由DBFlow或我们定义的任何模型类生成的代码)。 编译时已经报告过,当启用Proguard时,这当然不能构建。 第二个构建总是成功的。 有趣的是,代码生成已经在第一次运行 – 类在那里,也被IDE拿起。 但编译器以某种方式无法find它们,使我认为代码生成在构建过程中发生得太迟。 另一方面,如上所述,还有一些没有发现的代码生成和/或注释处理不需要做任何事情的类。 那么是否有比第二个版本更好的解决方案? 作为参考,我们的应用程序的build.gradle的相关部分看起来像这样 – 就像DBFlow文档建议: def dbflow_version = “3.0.0-beta4” dependencies { kapt “com.github.Raizlabs.DBFlow:dbflow-processor:${dbflow_version}” compile “com.github.Raizlabs.DBFlow:dbflow-core:${dbflow_version}” compile “com.github.Raizlabs.DBFlow:dbflow:${dbflow_version}” } kapt { generateStubs = true } 编辑:我发现,我也必须重建两次,我对代码的每一个变化。 它在第一个版本中编译正确,如果我以前没有清除,但是这些更改根本没有被拾取。
我正在尝试使用OkHttp或Retrofit将字符串发布到Kotlin中的API。 如果我只使用OkHttp ,不管我POST什么,我总是会得到一个空的数组。 private fun sendRegistrationToServer(refreshedToken: String) { Log.e(_tag, “Refreshed token: ” + refreshedToken) val okClient = OkHttpClient() val requestBody = FormBody.Builder() .add(“id”, “0”) .add(“token”, refreshedToken) .build() val request = Request.Builder() .url(“http://192.168.1.27/testApi/updates”) .post(requestBody) .build() try { val response = okClient.newCall(request).execute() Log.e(“B_RES”, response.body()?.string()) } catch (e: IOException) { Log.e(“RES_FAIL”, e.toString()) } } Logcat说: 01-09 17:58:24.054 20439-20670/testApi.testApi_android […]
我正在寻找一些在Kotlin中创建GridView的帮助。 请不要显示我的JAVA代码,因为我已经尝试过适应各种JAVA示例。 所以,我创建了扩展到BaseAdapter,但我无法传递上下文。 Android 文档通过调用gridview.setAdapter(new ImageAdapter(this));显示它如何访问gridview.setAdapter(new ImageAdapter(this)); 。 将BaseAdapter分配给我的活动中的GridView元素 collectionView.adapter = ButtonAdapter() 我试过传递上下文,但我得到错误的参数太多 collectionView.adapter = ButtonAdapter(baseContext()) 我的方法BaseAdapter扩展我试着初始化它 class ButtonAdapter : BaseAdapter() { var con: Context? = null //….. fun ButtonAdapter(context: Context) { con = context } } 我在做什么错在尝试传递上下文并创建GridView? 预先感谢您的任何帮助。
我是新的Android Studio – Kotlin,我用数字和数学运算符与小数点(.dot按钮)构建一个应用程序在我的数学计算器应用程序,如果按下点按钮,该按钮应该禁用或不输入第二时间。 如果按下多次,我想禁用或停止打印点按钮(。)。 这是我的代码 Acitivity.kt文件 package com.tripbegins.calculator import android.support.v7.app.AppCompatActivity import android.os.Bundle import android.view.View import android.widget.Button import com.tripbegins.calculator.R.id.* import kotlinx.android.synthetic.main.activity_main.* class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) } var emptyText = true fun numberEvents(view: View) { var checkButton:Boolean = false if(emptyText){ viewResult.setText(“”) } emptyText = false var button = […]