伴随对象相对于普通对象有什么优势?
科特林代码是这样的:
class Foo { companion object { fun a() : Int = 1 } fun b() = a() + 1 }
可以平凡地改变
object FooStatic { fun a() : Int = 1 } class Foo { fun b() = FooStatic.a() }
我知道,伴侣对象可以用来作为真正的Java静态函数,但是使用伴随对象还有其他的好处吗?
关键的区别之一是成员的知名度。 在同伴对象中,包含类的可见性是,如果成员是类的一部分,则不是原始对象的情况。
下面的例子显示你不能使用“对象”来实现一个类的私有静态内部。
package com.example class Boo { companion object Boo_Core { // Public "static" call that non-Boo classes should not be able to call fun add_pub(a:Int) = a+1; // Internal "static" call that non-Boo classes should not be able to call private fun add_priv(a:Int) = a+1; } // OK: Functions in Boo can call the public members of the companion object fun blah_pub(a:Int) = add_pub(a) // OK: Functions in Boo can call the private members of the companion object fun blah_priv(a:Int) = add_priv(a) } //Same idea as the companion object, but as an "object" instead. object Foo_Core { fun add_pub(a:Int) = a+1 private fun add_priv(a:Int) = a+1; } class Foo { // OK Foo can get Foo_Cors add_pub fun blah_pub(a:Int) = Foo_Core.add_pub(a); // ERROR: can not get to add_priv // fun blah_priv(a:Int) = Foo_Core.add_priv(a); } class AnInterloper { // OK Other classes can use public entries in Foo. fun blah_foo_pub(a:Int) = Foo_Core.add_pub(a); // ERROR Other classes can use public entries in Foo. // fun blah_foo_priv(a:Int) = Foo_Core.add_priv(a); // OK: Other classes can use public Boo classes fun blah_boo_pub(a:Int) = Boo.add_pub(a); // ERROR: Other classes can not use private Boo classes // fun blah_boo_priv(a:Int) = Boo.add_priv(a); }
- 在Kotlin中获取数字的因子
- Kotlin构建时不会发生Android API版本检查
- @Rule>在Kotlin Junit测试中必须是公共的ValidationError
- 将android hashmap转换为kotlin
- 为什么Kotlin的map-filter-reduce比Java的Stream操作在大输入上要慢?
- 意外的隐式转换为CharSequence:布局标签是TextView
- 什么是获得电话意图权限的正确方法
- 尝试在IntelliJ IDEA中运行Kotlin脚本
- 无法转换为org.jetbrains.kotlin.java.model.types.JeClassInitializerExecutableTypeMirror