在 android 学习中,学习 activity 返回获取结果,有这样的代码
override fun onActivityResult(
requestCode: Int,
resultCode: Int,
data: Intent?
) {
super.onActivityResult(requestCode, resultCode, data)
when (requestCode) {
1 -> if (resultCode == RESULT_OK) {
val returnedData = data?.getStringExtra("data_return")
Log.d("FirstActivity", "returned data is $returnedData")
}
}
}
在 result = RESULT_OK 中,RESULT_OK 是定义在 android.app.activity ,且为 public static final 修饰。 我自定义类为 FirstActivity (也是重写的 onActivityResult 所在的类),继承自 AppCompatActivity ,而 AppCompatActivity 是从 android.app.activity 一路继承下来的,那我的理解就是我自己定义的 FirstActivity 也有 RESULT_OK 这个常量。那么按理来说应该这个语句可以写为:
result = AppCompatActivity.RESULT_OK
或
result = FirstActivity.RESULT_OK
但是实际上只有result = AppCompatActivity.RESULT_OK
不报错(但是会显示为灰色,估计意思是写 AppCompatActivity 是多余的),而result = FirstActivity.RESULT_OK
报错
就想问 FirstActivity 应该也继承了 RESULT_OK ,为什么会报错呢
1
Newyorkcity 2022-01-15 21:57:38 +08:00
Java 里静态字段是不会被继承到子类。的吧。。
|
2
swhoro OP @Newyorkcity 可以看一下我详细问题中的倒数第二张图,Student 正常访问了 Person 的 description 字段
|
3
WebKit 2022-01-16 02:29:34 +08:00 via Android
static 修饰的变量和方法是属于类本身的,不会被继承。但是是可以正常访问的。
|
4
mxalbert1996 2022-01-16 10:53:29 +08:00 via Android
Java 的这个特性与其说是继承不如说只是一个语法糖而已。如果这个 static field 是一个对象,和继承不同,所有子类访问到的都是同一个对象。
Kotlin 语言本身并不存在 static 这个概念( static 语义是通过 companion object 实现的),所以如果在 Kotlin 里允许这种写法的话就会很奇怪,因为不同类的 companion object 之间并没有继承关系。 |
5
swhoro OP @mxalbert1996
@WebKit 那要怎么解释 result == AppCompatActivity.RESULT_OK 是正确的呢 AppCompatActivity 类是从 android.app.activity 一路继承下来的,RESULT_OK 是在 android.app.activity 定义的(把鼠标移到 RESULT_OK 上显示定义的类是这个),而我的 FirstActivity 是从 AppCompatActivity 继承下来的 那 result == AppCompatActivity.RESULT_OK 是正确的话我的 result == FirstActivity.RESULT_OK 应该也是正确的? |
6
mxalbert1996 2022-01-16 15:34:29 +08:00 via Android
@swhoro 因为 AppCompatActivity 是 Java 类
|
7
swhoro OP @mxalbert1996 也就是说由于 kotlin 和 java 语言的的差异,导致我的 firstactivity 无法访问 RESULT_OK 这个字段这个意思吗?
感觉 kotlin 引入之后变得好复杂了呀... |
8
swhoro OP @mxalbert1996 谢谢,用 java 重写逻辑之后发现 FirstActivity.RESULT_OK AppCompatActivity.RESULT_OK 这些都是正确的写法
看来 kotlin 与 java 区别还挺大的,还得再认真学一学 |
10
WebKit 2022-01-16 20:03:38 +08:00 via Android
另外 onActivityResult 这个方法也已经过时了,还是用新的比较好
|