问题标签 [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 回答
3162 浏览

memory-leaks - Kotlin伴随对象中的内存泄漏?

我正在使用 Kotlin 进行 Android 开发。有趣的问题。在 Java 中,在静态字段中保存 Context 是内存泄漏。但如果我将上下文存储在 Kotlin 伴随对象中,Android Studio 不会说这是内存泄漏。这意味着在 Java 字节码伴随对象不是静态代码?例如:

这里没有内存泄漏?感谢您的回答:)

0 投票
1 回答
632 浏览

kotlin - Kotlin Companion Object 只是从接口添加功能的一种方式吗?

我正在阅读 Kotlin in Action 一书并试图更好地理解 Companion Objects,除了从接口/抽象类添加方法实现之外,Companion Ojbects 还有其他用途吗?

我遇到了一种实例化对象的方法,该对象仅在类是抽象的情况下才有效:

0 投票
0 回答
1666 浏览

kotlin - 在 kotlin 中,对于 Parcelable 类中的 CREATOR 来说什么是正确的

使用 kotlin,有一个Data类实现Parcelable

似乎有两种方法来定义CREATOR: Parcelable 同伴中的:

1.

2

对应的java反编译代码是

1

2

List<Data>并且可以使用 kotlin从包裹中获取一个:

在java中它可能是:

似乎在 kotlin 中,同伴中的两个 CREATOR 都很好。

有什么区别,哪个更好用?

0 投票
1 回答
650 浏览

memory-management - Kotlin 对象类和伴随对象的内存分配行为

Kotlin 提供了一种更好的方法来创建单例对象和伴随对象以通过类名访问类成员。酷这是!!

但是这两种声明的内存分配是如何工作的,这是否像 java 中的静态一样工作,并且一直保留到应用程序生命周期。

我已经通过了几个这样的资源和这个它对我没有多大帮助。任何指导方针!!

0 投票
1 回答
573 浏览

logging - Kotlin 中的全局记录器

我目前正在 Kotlin 中从事一个相对较大的项目。我想实现一个日志记录方法,但是由于很多原因(特别是因为我需要一种非常特定类型的时钟管理和各种各样的附加程序,这在其他框架中实现起来会很痛苦),我不能使用典型的日志记录框架,比如日志4J。

我希望 - 如果可能的话 - 能够从所有类中记录,而无需显式地向它们传递 Logger 对象。我喜欢 Kotlin-logging 提供的日志记录方案(使用伴随对象),但它使用现有的框架,这是不行的。

在某种程度上,我需要的是某种方式来定义一个全局记录器。有什么建议吗?单例和伴随对象可能是解决方案的一部分,但我真的不知道如何构建方便的东西。

注意:我需要一个附加程序来写入 ZMQ,所以我宁愿避免实例化多个记录器。

0 投票
2 回答
2748 浏览

kotlin - kotlin中具有扩展功能的伴侣对象?

我想拥有扩展功能并使用来自kotlin-logging 的记录器,并在伴随对象中拥有常量。

我的功能:

问题是我应该放在哪里val logger = KotlinLogging.logger {}MY_CONST因为我不能使用带有扩展功能的伴生对象?

0 投票
2 回答
780 浏览

reflection - 如何使用 callBy() 调用 Kotlin 配套工厂方法?

我有代码接受一个类作为参数,并准备数据以调用该类的构造函数,如果存在工厂方法,则为伴随对象工厂方法。

调用构造函数时一切正常,但出现错误

调用工厂方法时。有问题的工厂方法:

没有必需的参数,除非有一些隐藏参数。有任何想法吗?

事实上,我恢复了完全删除参数fromJson并使用::fromJson.callby(emptyMap()). 同样的错误。

很明显,伴随方法至少需要一个附加参数。也许是班级?还是伴生对象?如何指定所需的参数?

构建 callBy() 的函数提供了一个类(或从提供的类中查找类)以及 json 名称和值。

0 投票
1 回答
1023 浏览

java - 如何从 Java 访问 Kotlin 伴随对象

我有这个 Kotlin 课程:

我想COL_ID在我的Java代码中使用:

但是,编译器告诉我这COL_ID是私有的。我试图添加public到所有元素(类、对象和 val),但它没有效果。

如何访问这些伴随对象常量?

更新我认为我的问题与给定的重复项不同,因为我想创建常量,而不是静态方法。

0 投票
0 回答
153 浏览

inheritance - Kotlin Companion 对象关于反射和继承的限制

认为:

  • 我需要很多用于子类的伴随(类静态)方法Parent
  • 我需要很多方法(非静态)的子类Parent
  • 我有 50 多个子类Parent
  • clazz由于性能,其他一些字段必须按类(而不是实例)计算
  • 期望伴随方法和非伴随方法使用计算成员(例如clazz:)
  • 最后但并非最不重要 Parent的一点,MyCompanion可能有复杂的逻辑,但类似的子ParentChild应该尽可能采用最简单的形式

问题:

如何Child在以下两个表达式中检索正确的类名:

代码:试试看

0 投票
1 回答
95 浏览

kotlin - Companion.foo 在伴随对象中有什么区别?

在 Kotlin 中,如果我在伴生对象中有一个以Companion.() 为前缀的函数,那么与伴生对象内部的函数Companion.foo相比,它会有什么不同foo

我注意到在下面的代码中,Companion.foo它将使它对外部范围不可见,但对同一个伴随对象内的函数仍然可见。

您可以在以下位置找到代码片段:https ://pl.kotl.in/t6FvM6ni6

还有其他区别吗?除了能见度之外是否A.Companion.foo和一样?A.foo这是一种将方法封装在伴生对象中的方法吗?


更新 1

在我的实际项目中,我从伴随对象中的inline另一个inline函数调用一个函数,这就是不能使用访问修饰符的原因。但如果可能的话,我仍然想隐藏起来foo