Kotlin代码是这样的:
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中,如果我在同伴对象中有一个以作为前缀()的函数,那么与同伴对象中的相比会有什么不同呢? 我注意到,在下面的代码中,将使它对外部作用域不可见,但对同一同伴对象内部的函数仍然可见。 您可以在:https://pl.kotl.in/T6FVM6NI6找到代码片段 还有其他区别吗?和除了可见性之外是否相同?这是将方法封装在陪伴对象中的一种方法吗?
两个 NavigableString 或 Tag 对象具有相同的HTML或XML结构时, Beautiful Soup就判断这两个对象相同. 这个例子中, 2个 <b> 标签在 BS 中是相同的, 尽管他们在文档树的不同位置, 但是具有相同的表象: “<b>pizza</b>” markup = "<p>I want <b>pizza</b> and more <b>pizza</b>!</p>"
两个 NavigableString 或 Tag 对象具有相同的HTML或XML结构时, Beautiful Soup就判断这两个对象相同. 这个例子中, 2个 <b> 标签在 BS 中是相同的, 尽管他们在文档树的不同位置, 但是具有相同的表象: “<b>pizza</b>” markup = "<p>I want <b>pizza</b> and more <b>pizza</b>!</p>"
我知道PriorityQueues的迭代器没有返回正确的顺序,因此我查看顺序的能力受到限制--但是我可以看到元素离开队列的顺序,而且它显然没有按照我希望的路径运行。 建议?
可以省略陪伴对象的名称,在这种情况下,将使用名称: 但是,我看到的示例中没有使用同伴对象的名称。 因为每个类只能有一个同伴对象(否则会得到错误),所以这个名称对我来说就像是一些非常没用的语法糖。
问题内容: 我得到的错误就在这行 。 该怎么办?其他逻辑还可以吗? 我想做的是有一个A列表和一个B列表,其中一个属性与id相同;尽管变量名不同。即在和在B。现在我将两个列表都放在ListAll中,并在相同的变量id / bid上对它们进行排序。我有A和B实现可比性。 和我的listAll是对象类型? 我该怎么做?谢谢。 问题答案: 您可以添加一个通用基类并在那里进行比较,如下所示: