问题标签 [kotlin-companion]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
408 浏览

kotlin - Kotlin:不能在外部枚举类中使用来自伴随对象的 const val

我有一个这样定义的 Kotlin枚举类

并且编译器在[1][2]行中给了我以下错误:

我可以通过将 const 提取到源文件的顶层来解决这个错误,但我不喜欢这个解决方案。有没有其他方法可以解决这个问题?

0 投票
1 回答
65 浏览

android - Kotlin - 同伴对象 fun 有什么作用?

在 Kotlin 中声明一个“静态”函数是通过以下方式完成的:

但是我错误地编码

如果只需要一个静态函数,则期望代码执行相同的操作。

编译器对此没有争论,它似乎是有效的,因为编译器需要一个fun名称和参数。但我从来没有找到如何从其他类调用该函数。

这种形式有companion object fun什么作用?没有可用的文档。

0 投票
3 回答
409 浏览

java - 从 Java 访问嵌套在伴随对象中的 Kotlin 对象

我在 Kotlin 中有这样的结构

问题是我必须有可能从 Java 访问子对象中的常量值,但这似乎是不可能的。我怎样才能在不改变结构的情况下解决这个问题?

0 投票
0 回答
118 浏览

kotlin - 为什么伴随对象将 const vals 放入父类?

我在 Kotlin 有一堂课:

以及访问伴随成员的 Java 中的 Main 类:

为什么在Java中,两者#aFunction()JUST_VAL只能通过Companionwhile访问CONST_VAL,只能通过父类直接访问?不CONST_VAL应该只通过 访问Companion吗?

0 投票
1 回答
957 浏览

inheritance - 无法从子类访问伴随对象方法

我正在尝试使用getInstance子类中的方法。
知道为什么上述方法无法访问以及如何更改此代码以便我可以访问它吗?

对于好奇的头脑,这个示例结构来自尝试在 Android 上继承 Room 数据库类。

该类SingletonHolder派生自 kotlin 中的惰性实现,并允许将参数传递给创建者函数。https://medium.com/@BladeCoder/kotlin-singletons-with-argument-194ef06edd9e

superclass在Android上模仿abstract class MyRoomDatabase : RoomDatabase(),这将在运行时创建一个sqlite db的实例,并建议作为单例实现。在我的情况下,这是在服务中。superclass_Impl将由房间库创建。

subclass就我而言,MyRoomDatabase它是连接到服务的客户端的子类并存在于客户端上。我正在尝试扩展它以添加仅由客户端使用的查询方法。subclass_Impl将由房间库创建。

0 投票
1 回答
77 浏览

java - 如何在 kotlin 伴随对象中覆盖从 java 类继承的 getter

首先,Manager(Kotlin 类)继承自JavaPlugin(Java 类)。这个 JavaPlugin 类包含一个 getter 方法getPlugin(Class<T>)

经理类:

现在回到我想调用的任何其他 Java 类(我的项目混合了两种语言)Manager.getPlugin(),但在 Java 中仍然只有JavaPlugin类中的方法,它是被继承的。在 Kotlin 文件中,我能够检索插件变量,但在 Java 文件中,我无法弄清楚这怎么可能。

我知道我Manager.Companion.getPlugin()现在可以使用,但我不想更改我的旧 Java 代码(其中包含旧的静态Manager.getPlugin()调用)。

我在这里对伴生对象是不是错了,应该使用不同的东西来用静态吸气剂模拟我的旧静态变量?(我读到您可以将变量放在类之外,但我不知道如何在名称下访问这些变量Manager(它仅适用于ManagerKt)。)

我希望有人对这个问题有一个更好的标题并对其进行编辑。

0 投票
1 回答
105 浏览

kotlin - 基类中的变量从派生类初始化但从超类调用时为空

我无法将继承的单例模式从 Java 转换为 Kotlin。

从主要类之一(不是精简版)我调用 ThumbnailManager.getInstance().gameData 并且 gameData 为空,即使它肯定是通过 ThumbnailManagerLite 初始化的。我注意到,当我调用 ThumbnailManagerLite.getInstance() 时,没有调用 super。

0 投票
2 回答
129 浏览

java - 是否可以扩展具有非空构造函数和伴随对象的类

我有一个 Java 代码,我想将其更改为 Kotlin 语法。java代码是:

代码与 RecyclerView 相关。我希望能够从静态嵌套类类型中创建尽可能多的 ViewHolder。我写了下面的代码,但感觉我像一个糟糕的代码,不可读(我不喜欢写匿名类,但不知道如何写“静态” ViewHolder 类并且总是返回相同的字段。

我写的代码:

我更喜欢使用扩展 RecyclerView.ViewHolder 类购买的伴随对象编写代码,因为编写:

object ViewHolder: RecyclewView.ViewHolder 强制我将View类型的提供()和参数提供给RecyclewView.ViewHolder

我做不到

0 投票
3 回答
130 浏览

java - 为什么无法从 Java 代码访问 Companion 对象?

正如我们所知,Kotlin 和 Java 是可互操作的。当我尝试访问 Kotlin 代码中的 Java 静态变量时,它可以工作,但是当我尝试访问 Java 中的伴随对象时,它不起作用。

0 投票
2 回答
185 浏览

android - 在活动和应用程序类中使用伴生对象是一种好方法吗?

我在活动、适配器、应用程序等中使用了很多静态数据,比如

为 Intent Extras 使用通用名称,以匹配两个活动之间的相同名称。因此,这些静态数据用于活动和另一个活动,甚至一些适配器。

我也在应用程序类中使用了这个,比如

这是一个不好的方法吗?有没有更好的方法来改善这一点?