Tag: 属性

Kotlin – 如何使用自定义名称制作地图代理?

我试图让我的头绕着财产代表,我有一个有趣的用例。 有没有可能有这样的事情: class MyClass { val properties = mutableMapOf() val fontSize: Any by MapDelegate(properties, “font-size”) } 这将允许我使用地图作为fontSize存储fontSize ,但使用自定义键(即“font-size”)。 如果用于存储诸如可以通过variables访问的CSS属性标记( fontSize )以用于代码的特定用例,但是在迭代地图( font-size: 18px; )时可以正确呈现。

在自定义视图构造函数中获取android:ellipsize属性的值

如何获得自定义View (扩展TextView )中的属性android:ellipsize的值? 我尝试了这些方法,但没有奏效: Log.d(TAG, attrs.getAttributeIntValue(ANDROID_NAMESPACE, “ellipsize”, -1)); Log.d(TAG, attrs.getAttributeValue(ANDROID_NAMESPACE, “ellipsize”)); Log.d(TAG, attrs.getAttributeUnsignedIntValue(ANDROID_NAMESPACE, “ellipsize”, 111)); Log.d(TAG, attrs.getAttributeListValue(ANDROID_NAMESPACE, “ellipsize”, new String[] {“x”, “marquee”}, -1)); 注意: attrs是AttributeSet (构造函数参数), ANDROID_NAMESPACE是”http://schemas.android.com/apk/res/android” 。

访问Kotlin的财产代表

Kotlin已经委派了属性,这是一个非常好的function。 但有时get()和set()方法是不够的。 假设我想要Closeable地创建一个Closeable对象并稍后关闭它。 下面是一个如何实现这样的委托属性的例子: fun closeableLazy(initializer: () -> T) = CloseableLazyVal(initializer) class CloseableLazyVal( private val initializer: () -> T ) : ReadOnlyProperty { private var value: T? = null override fun get(thisRef: Any?, desc: PropertyMetadata): T { if (value == null) { value = initializer() } return value } fun close() { value?.close() } } […]

包含generics的Kotlin函数的内联别名?

根据我在前面的问题中收到的建议,我用“别名”缩短了一些常用的外部函数(我不能控制的)的名字。 这对扩展function很好用; 不过,我还有一些顶级函数,我想要别名。 对于一个简单的例子,考虑generateSequence函数。 我想能够做到这一点: // DOES NOT COMPILE inline val seq:(()->T?)->Sequence get() = ::generateSequence …但是我不能这样做,因为在接收器types中必须使用generics,正如在这个答案中所解释的那样。 是否有任何其他方式来创建一个保留内联的顶级function(需要generics)的别名? 编辑:我试过使用Any? 和明星投影后发布的问题,但我仍然不认为这是一个很好的答案: inline val seq:(()->Any?)->Sequence get() = ::generateSequence 这似乎boptimalsu,因为它妥协对序列的元素types的types检查,正确的? 关于什么可以工作的其他答案/想法?

Kotlin抽象受保护的财产

如果我有以下类层次结构: abstract class Foo() { abstract protected val thing: T } class Baz : Foo { override protected val thing: T = … } 我对Baz ::事情说: 冗余可见性修改器 这是否意味着编译器将其视为受保护的,而不需要指定或者必须公开?

在Kotlin中获得线程安全属性的最简单方法是什么?

在Kotlin中获取Doubletypes的线程安全属性是最简单的方法吗? class SomeClass { @Volatile var someProp : Double? = null @Synchronized get @Synchronized set }

为什么一些Java的setter方法自动成为Kotlin的属性,但有一些不是?

例如这个WebSettings Java类。 它有一个Java方法setJavaScriptEnabled(boolean) ,它变成如下的Kotlin属性javaScriptEnabled ,但也有setSupportZoom(boolean) ,它不会变成Kotlin属性supportZoom 。 settings.javaScriptEnabled = true settings.domStorageEnabled = true settings.setSupportZoom(false) settings.builtInZoomControls = false settings.setSupportMultipleWindows(true)