Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 将静态java转换为伴随对象kotlin_Android_Kotlin - Fatal编程技术网

Android 将静态java转换为伴随对象kotlin

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

朋友们,我在尝试为以下java代码实现伴生对象时遇到了一个问题,请大家帮个忙:

正确的方法是什么

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使用
,这样你就不必创建单独的可空属性、双重检查锁或同步,因为它会为你做。但这只是几个整数的集合。让它懒惰没有多大意义。