我可以写:
@IdRes
abstract fun getHeaderId(): Int
Run Code Online (Sandbox Code Playgroud)
用val而不是funkotlin?它抱怨我写作时需要一个支持领域或代表:
@IdRes <-- errors
abstract val headerId: Int
Run Code Online (Sandbox Code Playgroud)
在这种情况下哪个是最惯用的?单线fun或带有背景场的混乱(我不习惯支持场,也许它是变化阻力,我从来没有真正使用它们所以我认为它们是不愉快的)
The*_*o95 13
由于抽象val或var只是一个没有后备字段的函数,因此无法通过注释进行val注释,但有一种解决方法.你可以像这样使用它:
@get:IdRes
abstract val headerId: Int
Run Code Online (Sandbox Code Playgroud)
编辑:
为什么会这样?我们需要更仔细地检查var注释及其源代码:
@Documented
@Retention(CLASS)
@Target({METHOD, PARAMETER, FIELD, LOCAL_VARIABLE})
public @interface IdRes {
}
Run Code Online (Sandbox Code Playgroud)
我们可以看到这个注释可以用在方法,参数,字段和局部变量上.当我们使用IdRes它时,它们都不是那些,因为它是抽象的,我们不能在Java中有抽象字段.通常IdRes在Java中相当于:
private int something
public int getSomething() {
return something;
}
Run Code Online (Sandbox Code Playgroud)
从示例中可以很容易地看出私有字段是所谓的属性的支持字段,并且您不能将它们视为抽象,因此这就是问题所在.
| 归档时间: |
|
| 查看次数: |
660 次 |
| 最近记录: |