范围分辨率运营商在Kotlin

我已阅读以下语法。 我不知道为什么使用范围解析运算符。 class XyzFragment : Fragment() { lateinit var adapter: ChatAdapter override fun onViewCreated(view: View?, savedInstanceState: Bundle?) { if (!::adapter.isInitialized) { <– This one adapter = ChatAdapter(this, arrayListOf()) } } } 我想知道什么是在if (!::adapter.isInitialized) {语句。 先谢谢了

Kotlin方法通用typesvalidation

我试图写一个方法,采取KProperty1和R的对象像这样 inline fun List.test(prop1: KProperty1, prop2: R): List 除非我没有对prop2进行types检查。 有什么办法可以确保prop2是R型的吗? 这是一个更完整的例子 class Foo class Bar(val foo: Foo) fun main(args: Array): Unit { val list = listOf(Bar(Foo())) list.test(Bar::foo, Foo()) // This should work list.test(Bar::foo, “”) // I want this to be a type error since a string is not a Foo } inline fun List.test(prop1: KProperty1, […]

Kotlin,高级function麻烦

我在MatrixStack上有以下HO函数 inline infix fun run(block: MatrixStack.() -> Any): MatrixStack { push() block() pop() return this } 而在其他地方,我有一个方法,我试图返回在block()计算的中间结果 fun getSphereOrbitPos(modelMatrix: MatrixStack, orbitCenter: Vec3, orbitAxis: Vec3, orbitRadius: Float, orbitAlpha: Float): Vec3 { modelMatrix run { translate(orbitCenter) rotate(orbitAxis, 360.0f * orbitAlpha) var offsetDir = orbitAxis cross Vec3(0.0f, 1.0f, 0.0f) if (offsetDir.length() < 0.001f) offsetDir = orbitAxis cross Vec3(1.0f, […]

即使在androidTest包中,Kotlin类也会作为junit测试运行 – 对于Java类,它运行正常

我遇到了非常奇怪的错误。 当我尝试运行测试,在我的Kotlin类的androidTest包,他们正在运行测试junit mehthods,并出现此错误: 处理完成退出代码1未find类:“com.someampp.shoppinglistapp.SomeClassTest”空测试套件。 你可以自己尝试。 我正在使用Android Studio 3.0.1 当我在Java中创建这样的类时: @RunWith(AndroidJUnit4.class) public class SomeTestClass{ @Test public void useAppContext() throws Exception { // Context of the app under test. Context appContext = InstrumentationRegistry.getTargetContext(); assertEquals(“com.myapp.shoppinglistapp”, appContext.getPackageName()); } } 一切工作正常。 但是,当我将Java文件转换为Kotlin: @RunWith(AndroidJUnit4::class) class SomeTestClass{ @Test @Throws(Exception::class) fun useAppContext() { // Context of the app under test. val appContext = […]

在KOTLIN中使用Replace函数

我尝试使用拉丁替换cyrlic字符下面的代码工作 val kztext83:String = kztext82.replace(’ə’,’ä’) 但实际翻译不是ä,它是一个’ 由于一个’是两个字符我越来越errror val kztext83:String = kztext82.replace(’ə’,’a”) 错误是 – 字符文字太多了? 我尝试了很多方法,包括创建字符串,没有解决问题

对空数组kotlin进行types推断

假设我有一段代码: fun temp2 (li : MutableList):Int { if (li.isEmpty()) return 0 val pos=li.filter { it>0 } val neg=li.filter { it<0 } if (pos.isEmpty() && neg.isNotEmpty()){ // this gives compiling error because Required: Int, Found: Int? // But I just checked one line higher that neg is Not Empty, so there (at least I guess) // […]

Kotlin:在lambda参数中解构

有没有办法迭代对象/对的列表,如下所示: val list = listOf(Pair(1,2),Pair(2,3)) list.forEach { first, second -> first + second } 以下也不起作用: list.forEach { (first, second) in it -> first + second }

为什么Kotlin的map-filter-reduce比Java的Stream操作在大输入上要慢?

前几天我创建了一个简单的基准(没有jmh和所有其他专业的东西,只是粗略地测量)。 我发现,对于同样简单的任务(遍历1000万个数字,将它们平方,只过滤偶数并减少它们的总和),Java工作得更快。 代码如下: 科特林: fun test() { println((0 .. 10_000_000L).map { it * it } .filter { it % 2 == 0L } .reduce { sum, it -> sum + it }) } Java的: public void test() { System.out.println(LongStream.range(0, 10_000_000) .map(it -> it * it) .filter(it -> it % 2 == 0) .reduce((sum, it) -> […]

Kotlin空课的目的是什么?

我正在通过Kotlin 参考文件 ,然后我看到了这一点。 类声明由类名,类头(指定其types参数,主构造函数等)以及由花括号包围的类正文组成。 标题和正文都是可选的; 如果class级没有身体,可以省略花括号。 class Empty 现在我想知道什么是这样的类声明没有标题和正文的用法

Kotlin实体types参数不能作为函数体中的types参数

Kotlin中的特定types参数可防止types参数擦除,并允许在运行时知道types参数。 这允许以下代码编译并按预期方式运行: inline fun isA(value: Any) = value is T 但是,当我尝试使用“T”作为types参数而不是独立时,我得到一个消息,它是一个擦除types。 以下代码仅供说明用途 : inline fun isListOfA(name: String): Boolean { val candidate = Class.forName(name) return candidate is List } 这是由于技术限制吗? 如果是这样,那么这个限制是什么?