Tag: 伴侣对象

Kotlin:对象与同伴对象之间的区别

kotlin中的一个对象和同伴对象之间有什么区别? 例: class MyClass { object Holder { //something } companion object { //something } } 如果包含的参数/方法与它的类紧密相关,我已经阅读过,应该使用伴随对象。 但是为什么还有在class上宣布一个正常的对象的可能性呢? 因为它的行为完全像伴侣,但它必须有一个名字。 在它的“静态”(我来自Java方面)生命周期中可能有不同吗?

我怎样才能引用从Java的伴侣对象?

我有一个混合的项目, Java和Kotlin类,我想知道如何从我的Java类引用companion objects 。

如何从kotlin中的伴侣对象访问外部类javaClass.simpleName?

我想能够从它的伴侣对象访问我的类的simpleName。 我想这样做: val o1 = Outer(“foo”) val o2 = Outer(“bar”) 打印下面的输出: Outer: hello Outer: foo Outer: bar 在java中的实际用例是这样的: class Outer { static final String TAG = Outer.class.simpleName(); // and now I’m able to use Outer.TAG or just TAG in both static and non-static methods } 我尝试了两件事情: 将Outer的simpleName赋值给伴随对象的COMPANION_TAG,然后使用伴侣的init中的COMPANION_TAG和遍历Outer的所有函数。 我可以从我需要的任何地方访问COMPANION_TAG,但不幸的是,我只能通过这种方式获得“伴侣”而不是“外”。 从伴侣对象的init访问Outer.OUTER_TAG。 这里的问题是,我无法find访问它的方式。 代码如下: class Outer(str: String) { […]

伴侣对象具有实现接口的好处

为什么在Kotlin / Scala中,伴侣对象可以实现一些接口,这有什么好处呢? 何时使用此function是有用的?

Kotlin访问派生types中的伴随对象成员

给出以下代码: open class Foo { companion object { fun fez() {} } } class Bar : Foo() { companion object { fun baz() { fez() } } } baz()可以调用fez() 我可以打电话给Foo.fez() 我可以打电话给Bar.baz() 但是,我不能打电话给Bar.fez() 我如何实现最终的行为?

如何从kotlin的对象实例访问伴侣对象?

伴随对象的简单样本类 class MyClass{ companion object{ val test = 25 } } 值测试可以通过MyClass.test访问,但是如何从MyClass的实例访问? 如果我有val sample = MyClass() ,那么我如何从样本访问测试? sample::class.test是不正确的….有没有办法? 提出的问题是:为什么不简单地使用MyClass.test? 我更喜欢把问题保持在“如何”而不是“为什么”,但是因为有人问我会尝试“为什么”。 这同样适用于这些方法。 为什么不在类中有静态函数,只需调用Class.function()并将对象作为参数之一传递? 考虑使用作为更抽象的基类传递的对象时,您正在使用的对象有几个可能的类。 你可以做一个switch和每个possbile类,并以适当的方式访问相应类的值(或函数),但多态的想法是你应该能够访问类的方法(即使函数方法代码对于同一个类的所有成员而言),或者是来自该类的一个对象实例的所有类的成员共有的值。 到目前为止,我的解决方案是简单地实现相当于MyClass的静态测试 public class MyClass { static Integer test = 25; public Integer testGetter(){ return test;} } 在Java,C ++,python等中有这样简单的解决方案…(我将提供代码样本,这对每个人都有帮助),我想在kotlin中会比使用Java更好的解决方案。 kotlin伴侣对象提供了静态的替代(有优势),用于在没有对象实例的情况下访问类属性的情况(如工厂),但是在对象实例可用的情况下还有另外一种静态的用法,静态是合适的,因为单个属性可以被类的所有成员共享,并且该属性不是实例相关的。

使用kotlin创建一个数据库工厂

所以我正在尝试用kotlin创建一个MongoDB工厂…但是我想我并不是很了解companion object的概念,因为我甚至不能编译它: package org.jgmanzano.storage import com.mongodb.MongoClient import com.mongodb.MongoClientURI import com.mongodb.client.MongoDatabase class MongoConnectionFactory(private val connectionURI: String) { private var database: MongoDatabase init { val connectionString = MongoClientURI(connectionURI) val mongoClient = MongoClient(connectionString) database = mongoClient.getDatabase(“paybotDB”) } companion object { fun getDatabase() : MongoDatabase { return database } } } 你们将如何实现这一目标? 我的想法是创建在Java中是一种工厂方法 。 我似乎无法得到正确的语法。 此外,这将是一个DB连接工厂的正确方法?

伴随对象之外的访问方法 – Kotlin

我对kotlin来说是个新手,我想知道是否有可能,并且如果最好的做法是从协同对象中访问协同对象之外的方法和variables。 例如 class A { fun doStuff(): Boolean = return true companion object{ public fun stuffDone(): Boolean = return doStuff() } } 或类似的东西 谢谢

同伴对象中的kotlin抽象静态乐趣

我从名为UserViewHolder的官方示例中了解了ViewHolder的用法。 public class UserViewHolder extends RecyclerView.ViewHolder { static UserViewHolder create(LayoutInflater inflater, ViewGroup parent) { UserItemBinding binding = UserItemBinding .inflate(inflater, parent, false); return new UserViewHolder(binding); } private UserItemBinding mBinding; private UserViewHolder(UserItemBinding binding) { super(binding.getRoot()); mBinding = binding; } public void bindTo(User user) { mBinding.setUser(user); mBinding.executePendingBindings(); } } 我要写许多ViewHolder类,所以我希望我可以写一个抽象类。 在Java中,它看起来像: public abstract static class BaseViewHolder { abstract […]