android - kotlin android中带有注释的抽象val
问题描述
我可以写:
@IdRes
abstract fun getHeaderId(): Int
在kotlin中用aval
代替a ?fun
它抱怨我在写时需要一个支持字段或委托:
@IdRes <-- errors
abstract val headerId: Int
在这种情况下,哪个是最惯用的?单线fun
与支持字段或混乱(我不习惯支持字段,也许是抗变化,我从未真正使用过它们,所以我认为它们不愉快)
解决方案
由于 abstract val
orvar
只是一个没有支持字段的函数,因此无法通过注释对其进行注释,IdRes
但有一种解决方法。你可以像这样使用它:
@get:IdRes
abstract val headerId: Int
编辑:
为什么这行得通?我们需要仔细检查IdRes
注解及其源代码:
@Documented
@Retention(CLASS)
@Target({METHOD, PARAMETER, FIELD, LOCAL_VARIABLE})
public @interface IdRes {
}
正如我们所见,这个注解可以用在方法、参数、字段和局部变量上。当我们使用abstract val
它时,它们都不是,因为它是抽象的,我们不能在 Java 中拥有抽象字段。abstract val something: Int
在 Java 中通常等价于:
private int something
public int getSomething() {
return something;
}
从示例中,很容易看出私有字段是所谓的属性的支持字段,您不能将它们作为抽象字段,所以这就是问题所在。
推荐阅读
- python - 使用 pdfplumber 和 Paramiko 从 SFTP 服务器读取 PDF 文件
- flutter - 如何在颤动中等待常规(非异步)代码(函数)?
- python - PYTHON -- ModuleNotFoundError: 当我尝试导入包时没有名为“playsound”的模块
- javascript - 开发 JQuery Query Builder 接口的克隆
- c# - 对象数组未绑定的 Asp.net Core 3.1 Web api 请求
- excel - POI:使用具有条件格式的 Excel 模板
- vba - VBA - 使用日期搜索条件循环浏览网络位置上的多个子文件夹/提高搜索速度
- directory - 使用 Python 3,如何一次性将本地路径中的所有文件复制或上传到目标 SFTP 路径?
- apache-spark - Apache Beam AvroIO 读取大文件 OOM
- python-2.7 - 如何根据Python中的先前值预测列值