Android 将静态java转换为伴随对象kotlin
朋友们,我在尝试为以下java代码实现伴生对象时遇到了一个问题,请大家帮个忙: 正确的方法是什么Android 将静态java转换为伴随对象kotlin,android,kotlin,Android,Kotlin,朋友们,我在尝试为以下java代码实现伴生对象时遇到了一个问题,请大家帮个忙: 正确的方法是什么 private static SparseIntArray ORIENTATIONS = new SparseIntArray(); static { ORIENTATIONS.append(Surface.ROTATION_0, 0) ORIENTATIONS.append(Surface.ROTATION_90, 90) ORIENTATI
private static SparseIntArray ORIENTATIONS = new SparseIntArray();
static {
ORIENTATIONS.append(Surface.ROTATION_0, 0)
ORIENTATIONS.append(Surface.ROTATION_90, 90)
ORIENTATIONS.append(Surface.ROTATION_180, 180)
ORIENTATIONS.append(Surface.ROTATION_270, 270)
}
伴星
companion object Orientations {
private var ORIENTATIONS: SparseIntArray? = null
val orientations: SparseIntArray?
get() {
if (ORIENTATIONS == null) {
synchronized(SparseIntArray::class.java) {
if (ORIENTATIONS == null) {
ORIENTATIONS = SparseIntArray {
ORIENTATIONS.append(Surface.ROTATION_0, 0)
ORIENTATIONS.append(Surface.ROTATION_90, 90)
ORIENTATIONS.append(Surface.ROTATION_180, 180)
ORIENTATIONS.append(Surface.ROTATION_270, 270)
}
}
}
}
return ORIENTATIONS
}
}
生成以下错误
Type mismatch.
Required:Int
Found:() → [ERROR : Cannot infer type variable TypeVariable(_L)]
这样试试
SparseIntArray().apply {
append(Surface.ROTATION_0, 0)
append(Surface.ROTATION_90, 90)
append(Surface.ROTATION_180, 180)
append(Surface.ROTATION_270, 270)
}
但是在Java中,如果(ORIENTATIONS==null)没有
。
。应该是
companion object Orientations {
// public because I assume it has a public getter in Java
val ORIENTATIONS = SparseIntArray()
init {
ORIENTATIONS.append(Surface.ROTATION_0, 0)
ORIENTATIONS.append(Surface.ROTATION_90, 90)
ORIENTATIONS.append(Surface.ROTATION_180, 180)
ORIENTATIONS.append(Surface.ROTATION_270, 270)
}
}
或者正如古尔根的回答所示,如何简化它:
companion object Orientations {
val ORIENTATIONS = SparseIntArray().apply {
ORIENTATIONS.append(Surface.ROTATION_0, 0)
ORIENTATIONS.append(Surface.ROTATION_90, 90)
ORIENTATIONS.append(Surface.ROTATION_180, 180)
ORIENTATIONS.append(Surface.ROTATION_270, 270)
}
}
如果你真的想让它变得懒惰,Kotlin在Tenfour04的评论中提到过,它看起来就像
companion object Orientations {
val ORIENTATIONS by lazy {
SparseIntArray().apply {
ORIENTATIONS.append(Surface.ROTATION_0, 0)
ORIENTATIONS.append(Surface.ROTATION_90, 90)
ORIENTATIONS.append(Surface.ROTATION_180, 180)
ORIENTATIONS.append(Surface.ROTATION_270, 270)
}
}
}
但这很可能适得其反。ORIENTATIONS=SparseIntArray{…}by ORIENTATIONS=SparseIntArray.apply{…}。它工作得很好,?apply做什么?用这个值调用指定的函数块作为它的接收器并返回这个值。还想指出的是,如果你想延迟加载它,可以通过lazy使用
,
,这样你就不必创建单独的可空属性、双重检查锁或同步,因为它会为你做。但这只是几个整数的集合。让它懒惰没有多大意义。