假设我有一个Kotlin接口:
interface Dog {
fun walk()
}
val poodle : Dog = object : Dog {
override fun walk() {
...
}
}
Dog poodle = new Dog() {
private static final String POODLE_FASHION = ...
@Override
public walk() {
...
}
}
val poodle : Dog = object : Dog {
private const val POODLE_FASHION = ...
override fun walk() {
...
}
}
有人能解释一下为什么Java版本可以工作,而Kotlin版本不行吗?我如何为Kotlin做这件事(我已经尝试了companion object,但得到错误修饰符'companion'在'local class'中不适用)?注意,我不想执行以下操作,因为我希望poodle_fashion
位于Val Poodle
内部,因为我还将创建其他狗对象,但需要稍加修改(Val Pug
、Val Chihuahua
等):
private const val POODLE_FASHION = ...
val poodle : Dog = object : Dog {
override fun walk() {
...
}
}
谢谢!
val poodle : Dog = object : Dog {
private const val POODLE_FASHION = ...
override fun walk() {
...
}
}
在本例中,poodle_fashion
没有任何理由需要是静态的或常量的。它可以只是一个普通的val
,并且不会额外花费您任何费用。
这就是说,听起来您应该有一个poodle
类,而不是一个对象。
Kotlin 用对象表达式和对象声明来实现创建一个对某个类做了轻微改动的类的对象,且不需要去声明一个新的子类。 对象表达式 通过对象表达式实现一个匿名内部类的对象用于方法的参数中: window.addMouseListener(object : MouseAdapter() { override fun mouseClicked(e: MouseEvent) { //
主要内容:对象表达式,对象声明,伴生对象,对象表达式和对象声明之间的语义差异Kotlin 用对象表达式和对象声明来实现创建一个对某个类做了轻微改动的类的对象,且不需要去声明一个新的子类。 对象表达式 通过对象表达式实现一个匿名内部类的对象用于方法的参数中: 对象可以继承于某个基类,或者实现其他接口: 如果超类型有一个构造函数,则必须传递参数给它。多个超类型和接口可以用逗号分隔。 通过对象表达式可以越过类的定义直接得到一个对象: 请注意,匿名对象可以用作只在本地和私有作用域
根据JLS: 内部类是不是显式或隐式声明为静态的嵌套类。内部类不能声明静态初始值设定项或成员接口。 但我下面的代码编译成功。 有人能帮我理解这种行为吗
我想使用Powermock(基于EasyMock)模拟私有静态内部类。这不是来自生产代码,这只是一个是否可能的问题。我很确定这是一个糟糕的设计,但这是我为科学而努力的东西。 假设我们有一个具有静态私有内部类的类: IExpectationSetters中的andReturn(capture)不能应用于(java.lang.Object) 私人静态内部阶级的嘲笑甚至可能吗?我还没有在SO上找到一个
本文向大家介绍Kotlin中的对象表达式和对象声明的具体使用,包括了Kotlin中的对象表达式和对象声明的具体使用的使用技巧和注意事项,需要的朋友参考一下 Kotlin的对象表达式与Java中的匿名内部类的主要区别:匿名内部类只能指定一个父类型,但对象表达式可以指定0~N个肤类型。 一、对象表达式 对象表达式的语法格式如下: 对象表达式还有如下规则: 对象表达式不能是抽象类,因为系统在创建对象表达
问题内容: 静态和非静态嵌套类有什么区别? 问题答案: 根据定义,内部类不能是静态的,因此我将重述您的问题为“静态和非静态嵌套类之间有什么区别?” 非静态嵌套类具有对其嵌套的类的成员的完全访问权。静态嵌套类没有对嵌套实例的引用,因此静态嵌套类无法调用非静态方法或访问嵌套该类的实例的非静态字段。