Tag: 继承

Java将特定类的列表添加到java.lang.Object列表中,与java 8 streams一起工作 – 为什么?

public class Test { static List<Object> listA = new ArrayList<>(); public static void main(final String[] args) { final List<TestClass> listB = new ArrayList<>(); listB.add(new TestClass()); // not working setListA(listB); // working setListA(listB.stream().collect(Collectors.toList())); System.out.println(); } private static void setListA(final List<Object> list) { listA = list; } } 为什么它与流一起工作,并不适用于简单的设置?

错误或功能:Kotlin允许在继承中将“val”更改为“var”

我刚开始探索Kotlin语言。 我正在努力继承,var和val和副作用。 如果我声明一个具有val x的特征A并且在AImpl覆盖x ,则可以将其重写为var (参见下面的代码)。 令人惊讶的是A的print()方法受x的重新分配影响,即使x是A的值。 这是一个错误还是一个功能? 码: trait A { fun print() { println("Ax = $x") } val x : Int; } class AImpl(x : Int) : A { override var x = x; // seems like x can be overriden as `var` } fun main(args: Array<String>) { val a = AImpl(2) a.print() […]

密封的内部类

我想创建一个封闭的类的宇宙,其中每个子类是一些外部类的内部类。 我以为我可以使用密封的内部类作为层次结构的基础,如下所示: class Outer { fun foo(): Int { // … } inner sealed class InnerBase(val i: Int) { fun sharedFunctionality() { println(foo() + i) } abstract fun doIt() inner class Inner1: InnerBase(1) { override fun doIt() { blah() sharedFunctionality() bloo() } } } } 注意 Outer是一个适当的类,它可以有许多不同的实例。 每个实例应该能够创建将调用正确的foo Inner1 InnerBase子类的Universe是有限的 InnerBase有一些实例方法,被各种Inner子类使用,访问Outer的非静态方法foo InnerBase的具体子类(例如Inner1 )将参数传递给InnerBase的构造函数 但是,这个问题是我不知道如何在Outer构造一个Inner1类型的值。 我希望这会工作: […]

Kotlin:子构造函数如何使用其父构造函数?

例如,我们有这个家长: open class Parent(val id: Int, val name: String?) { constructor() : this(-1, null) } 和一个孩子一样,它必须同时具有父参数构造函数和空构造函数: class Child(id: Int, name: String?) : Parent(id, name) { constructor() : super() // syntax error } 子构造函数如何使用其父构造函数? 我知道我可以实现一个子构造函数传递与父类相同的值,但这不仅看起来多余,而且往往是我的孩子有其主要构造函数的额外参数,但不需要中间构造函数(构造函数与参数不包括所有额外的参数)。 下面是一个例子,以这种方式实现它,以防我不清楚: class Child(id: Int, name: String?) : Parent(id, name) { constructor() : this(-1, null) // no syntax error, but redundant }

Kotlin:“val someVar = if(xx)1 else 1.0”,为什么someVar是“Any”?

首先,我试过: interface Super class A : Super class B : Super val a = if (System.currentTimeMillis() >= 100) A() else B() 我按Ctrl Q来检查一个类型。 Super预期的。 但是当我尝试: val someVar = if (System.currentTimeMillis() > 0) 1 else 1.0 它说一些someVar是一个Any 。 它不应该是一个Number吗?

如何让一个数据类在Kotlin中实现Interface / extends Superclass属性?

我有几个数据类,其中包括一个var id: Int? 领域。 我想在接口或超类中表达这个,并且有数据类扩展,并在构造时设置这个id 。 但是,如果我尝试这样做: interface B { var id: Int? } data class A(var id: Int) : B(id) 它抱怨我重写id字段,我哈哈.. 问 :在这种情况下,如何让数据类A在构造时使用一个id ,并将接口或超类中声明的id设置为?

在kotlin中,如何传递一个MutableList,其中目标需要一个List

有一个定义为List值的哈希映射: private var mMap: HashMap<String, List<DataStatus>>? = null 有一个函数返回一个哈希映射,但与MutableList的值 fun getDataStatus(response: JSONObject?): HashMap<String, MutableList<DataStatus>> { return HashMap<String, MutableList<AccountStatusAlert>>() } 当将结果传递给期望List的hashMap时,它得到错误: mMap = getDataStatus(resp) //<== got error 有错误: Error:(81, 35) Type mismatch: inferred type is HashMap<String, MutableList<DataStatus>> but HashMap<String, List<DataStatus>>? was expected

抽象类与Lambda参数

由于kotlin对lambdas有很好的支持,我开始使用lambdas作为abstract类的构造函数参数,而不是声明abstract val/fun 。 我认为这更简洁,特别是因为val type get的推断。 这有什么缺点? abstract class AbstractListScreen<T> ( val data: Set<T>, val filterators: (T) -> Set<String> ) { fun open() { /* … */ } } class OrderListScreen : AbstractListScreen<Data>(data = setOf(), filterators = { setOf(it.toString()) } ) { fun someEvent() { /* …*/ } }

传入参数时Kotlin类型不匹配

我重写了一个父类中的函数,它需要一个Any类型的参数。 我想要吗? 成为Venue类型的一个实例,这样我就可以把它的id,但是,我不能使用getModelId(model: Venue?)来覆盖函数,因为这不是超类中定义的方式。 什么是最好的方式来确保这个用例模型的类实例是Venue? 我可以把它里面的数据抽出来,我想要吗? open class VenueAdapter: ParentClass() { override fun getModelId(model: Any?): Any? { //here I want to be able to pull the id out of the Venue class instance return model.id } 抽象类ParentClass {//我也试着用类型参数fun getModelId(model:M)来定义它,但是没有成功。 抽象的乐趣getModelId(模型:任何?):任何? } data class Venue (id: String) 我也考虑过了 override fun getModelId(model: Any?): Any? { when (model) […]

Kotlin的访问修饰符是否和Java中的一样?

Kotlin有3个访问关键字: public , private和protected 。 他们的意思是和Java一样的东西,还是有区别? 另外, internal是否与package private相同? 我一直在阅读关于Kotlin的“模块”,我不确定这是不是“包”的另一个词。