我正在努力学习Kotlin.是什么 val,var和internalKotlin相比,Java?
在Java中:
RadioGroup radioGroup;
RadioButton button;
Button submit;
Run Code Online (Sandbox Code Playgroud)
转换后显示:
internal var radioGroup: RadioGroup
internal var button: RadioButton
internal var submit: Button
Run Code Online (Sandbox Code Playgroud) 这实际上是2个问题。
Person数据类中我将name参数设置为val而不是var. 代码将因以下错误而中断:Run Code Online (Sandbox Code Playgroud)error: cannot find symbol import com.example.android.aboutme.databinding.ActivityMainBindingImpl; ^ symbol: class ActivityMainBindingImpl location: package com.example.android.aboutme.databinding
为什么会发生?
invalidateAll()的doneClick()?文档说它“使所有绑定表达式无效并请求新的重新绑定以刷新 UI”。数据绑定的目的不是以更新数据立即更新视图的方式连接数据和视图吗?主要活动:
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
val person = Person("Bob")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
binding.person = person
binding.apply {
btnDone.setOnClickListener { doneClick(it) }
}
}
private fun doneClick(view: View) {
binding.apply {
person?.nickname = etNickname.text.toString()
invalidateAll()
etNickname.visibility = …Run Code Online (Sandbox Code Playgroud) 我可以使用MutableList<MDetail>Gson正确地使用代码1保存到json字符串,但是当我尝试MutableList<MDetail>使用代码2从json字符串恢复对象时出现错误。我搜索了一些资源,看来我需要注册InstanceCreator。
如何InstanceCreator用Kotlin 写一个注册码?谢谢!
错误
Caused by: java.lang.RuntimeException: Unable to invoke no-args constructor for interface model.DeviceDef. Registering an InstanceCreator with Gson for this type may fix this problem.
Run Code Online (Sandbox Code Playgroud)
代码1
private var listofMDetail: MutableList<MDetail>?=null
mJson = Gson().toJson(listofMDetail) //Save
Run Code Online (Sandbox Code Playgroud)
代码2
var mJson: String by PreferenceTool(this, getString(R.string.SavedJsonName) , "")
var aMListDetail= Gson().fromJson<MutableList<MDetail>>(mJson)
inline fun <reified T> Gson.fromJson(json: String) = this.fromJson<T>(json, object: TypeToken<T>() {}.type)
Run Code Online (Sandbox Code Playgroud)
我的课
interface DeviceDef
data class BluetoothDef(val status:Boolean=false): DeviceDef
data class WiFiDef(val name:String, val status:Boolean=false) : …Run Code Online (Sandbox Code Playgroud) 我是 Kotlin 的初学者,实际上我正在 Kotlin 中做一个 Andro\xc3\xafd 应用程序。我必须初始化一些值未知的属性(实际上不是,但从现在开始很难定义),所以我想像在 TypeScript 中一样,例如:public startDate: any;这意味着 startDate 的类型可以是任何类型(它不是不安全,但无论如何它都有助于获得价值,而不是考虑发生的事情)。
有没有办法在 Kotlin 中做到这一点?\n我尝试了“?” 或 List<*> 或参数中的 *,但它不是这样工作的。
\n\n谢谢阅读!
\n我有以下Kotlin代码。一个密封的类称为Animal,还有两个对象类,Dog并Cat从该密封的类继承Animal。我when在is Cat案例的子句中收到此错误。
Incompatible types: Cat and Dog
Run Code Online (Sandbox Code Playgroud)
为什么会出现此错误?如何在Kotlin中使用密封类进行此类操作?密封类是进行多态性的好选择吗?
sealed class Animal {
abstract fun speak()
}
object Dog : Animal() {
override fun speak() { println("woof") }
}
object Cat : Animal() {
override fun speak() { println("meow") }
}
fun main(args: Array<String>) {
var i = Dog
i.speak()
when(i) {
is Dog -> {
print("Dog: ")
i.speak()
}
is Cat -> {
print("Cat: ")
i.speak()
}
}
}
Run Code Online (Sandbox Code Playgroud) 假设我有这样的东西:
var x : String = "str"
// here do some with x, but not assign new value to it
Run Code Online (Sandbox Code Playgroud)
然后 Android Studio 告诉我 x 应该用 声明val,而不是var。我知道和
之间有什么区别。
如果我不需要为其赋值,则可以是.
但它在运行时有什么区别吗?当我用而不是
声明变量时,它是否更快?varvalxvalvalvar
这不是重复的!我问的是性能,而不是意义的差异。
我真的想知道为什么Kotlin用这个词val代表不变?
如果var意味着变量.val意味着什么 ?val意思是var+ l或者val只是一个简短的单词?
在Kotlin文档中,我们只有以下单词.
使用val关键字声明只读局部变量.使用var关键字声明可变局部变量.
这个问题不仅要理解这个词val,还要提醒WORD MAKER告诉我们他们为什么命名这个词,这不是一件小事,这会让我们学习新知识更加舒服,我们想学习并理解一切.
例如,很多人想知道为什么Swift使用这个词let或为什么Objective-C使用.m文件扩展名?
我认为官方文件或回复非常重要,任何猜测或假设都不是真的有用,因为它不具有说服力,困惑仍然是困惑的.
我也在官方论坛上提出这个问题:https:
//discuss.kotlinlang.org/t/why-kotlin-use-the-word-val-to-stand-for-constant/4491
一些参考文献:https:
//discuss.kotlinlang.org/t/change-val-to-something-else/1180/13
问题是,当我运行我的代码时,应用程序因错误而停止(java.lang.RuntimeException: Unable to start activity ComponentInfo{com.twixt.pranav.pos/com.twixt.pranav.pos.View.Activity.Cart }: java.lang.NullPointerException: Attempt to invoke virtual method 'java.io.File android.content.Context.getDatabasePath(java.lang.String)' on a null object reference) 在你可以看到我插入的代码中手动一个数据
我见过类似的问题,但没有解决方案
这是我的课
class FragmentCart : Fragment() {
private val database: SQLiteHelper = SQLiteHelper(activity)
override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View {
val mView = inflater!!.inflate(R.layout.fragment_cart, container, false)
if (database != null) {
val array_list = database.cartdatas()
Toast.makeText(activity, "" , Toast.LENGTH_SHORT).show()
}
return mView
}
Run Code Online (Sandbox Code Playgroud)
Sqlite 辅助类
public class SQLiteHelper extends SQLiteOpenHelper {
private static final int DATABASE_VERSION …Run Code Online (Sandbox Code Playgroud)