Tag: 遗产

在子构造函数中初始化抽象类字段

我有抽象类A与一些领域 public abstract class A { var name: String = "Empty name" } 并想继承它 public class B(name: String) : A() { init { this.name = name } } 有没有办法不创建一个初始化块,并做类似class B(::name: String) name的单行初始化?

为什么这个班级考虑最终?

我试图继承下面的类型,但编译器说它是最终的。 class Dice(private var side : Int) { constructor(D : DiceTypesK) : this(D.value) {} } class ExplodedDice(private val D : DiceTypesK) : Dice(D) // ^^^^ this class is final and // can not be inherited from 为什么我的类型是最终的,因为我不打算这样做?

从Java类继承的Kotlin类是否也继承自Any?

从Java类继承的Kotlin类是否也从Any继承? 如果我们有一个Java类Foo和一个从Foo继承的Kotlin类Bar,并且我们试图在Kotlin的MutableList中使用它,那么下面的工作应该如何? class Class(items: MutableList<Bar> = mutableListOf()) { var items: MutableList<Any> = items }

数据和开放不兼容,我有哪些替代方案?

我正在做一个gli的kotlin端口 ,现在我被卡住了 其实我有以下几点 open class Texture 扩展了几个类,如Texture2d 现在, Texture有相当的一些属性 protected val storage: StorageLinear? protected val target: Target protected val format: Format protected val baseLayer: Int protected val maxLayer: Int protected val baseFace: Int protected val maxFace: Int protected val baseLevel: Int protected val maxLevel: Int protected val swizzles: Swizzles 因此我想把它作为一个data类来利用它所附带的equals() 。 但不幸的是data和open不兼容..(看到这个问题 ) 有一种方法可以解决这个问题,我可以编写我自己的equals()方法,但是这将是样板代码和肮脏的,正是我为什么切换到java的kotlin最大的两个原因 另一种方式,因为所有扩展Texture的class都不会真的添加任何东西,所以它们会起到类似的构建器的作用(看起来类似于Texture2d类 […]

超类属性未在Derived类中初始化

我有以下的Kotlin代码: import java.util.* import kotlin.collections.HashSet open class Graph(open val n: Int) { val graph = List<MutableSet<Int>>(n) {HashSet<Int>()} open fun addEdge(u: Int, v: Int) { graph[u].add(v) graph[v].add(u) } val numEdges: Int get() { return graph.asSequence() .map { it.size } .reduce { x, y -> x + y } } fun edgeSet() : HashSet<Pair<Int,Int>> { val result […]

var可以用val和Kotlin中的继承类重写吗?

我是Kotlin的新手,现在还在努力寻找方向。 我知道从这个问题 ,val可以被覆盖与var继承它的类,但这是真的另一种方式呢? 如果不是,是否有任何可能的解决方法?

在Kotlin扩展数据类

数据类似乎是Java中老式POJO的替代品。 可以预期的是,这些类将允许继承,但我没有看到扩展数据类的方便途径。 我需要的是这样的: open data class Resource (var id: Long = 0, var location: String = "") data class Book (var isbn: String) : Resource() 上面的代码由于component1()方法的冲突而失败。 仅在其中一个类中留下data注释也不能完成这项工作。 也许还有另一个习惯用法来扩展数据类? UPD:我可能仅注释子类,但data注释只处理在构造函数中声明的属性。 也就是说,我必须宣布所有父母的属性open并覆盖它们,这很丑陋: open class Resource (open var id: Long = 0, open var location: String = "") data class Book ( override var id: Long = 0, […]

在Kotlin中扩展Java类时,继承的平台声明发生冲突

我想用Kotlin扩展第三方的Java类,但是我得到这个编译器信息: 继承的平台声明冲突:以下声明具有相同的JVM签名(setCollection(Ljava / util / Collection;)V): fun setCollection(collection:(Mutable)Collection <(raw)Any?> !:在KotlinClass中定义的单位 fun setCollection(collection:(Mutable)Collection <String!>!):在KotlinClass中定义的单位 无论我做什么,都无法使用Kotlin代码来编译它。 代码重现的情况: //JavaInterface.class import java.util.Collection; public interface JavaInterface { void setCollection(Collection<String> collection); } //JavaBaseClass.class import java.util.Collection; public class JavaBaseClass { public void setCollection(Collection collection){} } //JavaSubClass.class public class JavaSubClass extends JavaBaseClass implements JavaInterface {} //KotlinClass.kt class KotlinClass : JavaSubClass() Java本身没有这个问题。 所以我的猜测是,这可能与平台类型( String!不是Any? […]