- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在将部分应用程序从 Java 迁移到 Kotlin,对此有疑问。
什么是更好的或更好的方法?
@file:JvmName("ClassX")
fun funX() {}
或
class ClassX {
companion object {
@JvmStatic
fun funX() {}
}
}
最佳答案
让我们看看反编译后的代码来回答这个问题。
Kotlin 文件,带有像您一样的 @JvmName
注释:
@file:JvmName("ClassX")
fun funX() {}
将被编译成字节码,类似于这个 Java 代码:
@JvmName(
name = "ClassX"
)
public final class ClassX {
public static final void funX() {
}
}
与您在使用 Java 时可能会编写的内容非常相似,对吧?
一个 Kotlin 类,带有这样的伴随对象:
class ClassX {
companion object {
@JvmStatic
fun funX() {}
}
}
类似于此 Java 代码:
public final class ClassX {
public static final ClassX.Companion Companion = new ClassX.Companion((DefaultConstructorMarker)null);
@JvmStatic
public static final void funX() {
Companion.funX();
}
public static final class Companion {
@JvmStatic
public final void funX() {
}
private Companion() {
}
// $FF: synthetic method
public Companion(DefaultConstructorMarker $constructor_marker) {
this();
}
}
}
如您所见,带有伴随对象的类将生成更多代码。
这是好事还是坏事?你决定。我会说这很糟糕,最好使用带有 @JvmName
注释的文件。在 Kotlin 的论坛上也有关于此主题的讨论:read the best practices.
顺便说一句,您可以通过“工具”->“Kotlin”->“显示 Kotlin 字节码”在 IntelliJ IDEA 中查看字节码和反编译的 Java 代码。
关于android - @文件 :JvmName vs @JvmStatic in companion object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57355210/
我正在查看与 Akka 相关的类型安全激活器代码,以下构造引起了我的兴趣: 伴侣对象: object MarkerActor { sealed trait MarkerMessage case
我在所有 Jetpack compose 项目中多次收到此错误。此错误是否与 Gradle 相关?因为我没有对主题进行任何更改。 java.lang.NoSuchFieldError: No fiel
我第一次使用 Jetpack Compose,但出现此错误。我还没有弄清楚问题到底出在哪里,但我正在使用单 Activity 架构。如果需要更多信息,请告诉我。 根据错误,问题似乎来自脚手架。
在 Kotlin 中,如果我在带有 Companion. 的伴随对象中有一个函数作为前缀( Companion.foo ),它与 foo 相比有何不同?在伴生对象内? 我注意到在下面的代码中,Comp
一本书谈论string::size_type (这是 string.size() 类的 std::string 函数的返回类型)。 我不明白这些“同伴类型”是什么。有人能给我详细解释一下它们是什么吗?
阅读 Ordesky 关于 Scala 的书的第 20 章,我发现内部类是路径相关的。在其他特性中,这意味着它们只能在外部类中实例化或提供外部类实例。 问题来了:我想在 Scala 中实现一个stat
出于某种原因,我的应用程序图标从未出现在 中同伴 应用程序 苹果 watch . 图标出现在 iPhone 和 苹果 watch 仪表盘。 我提供了配套设置所需的 58*58(29*29@2x) 和
所以我是学习 Kotlin 的新手,来自 C# 背景。我一直在处理类型和其他一些事情。我正在尝试创建一个静态类“WalMartGreeters”,它可以将欢迎词添加到列表中,然后调用一个简单的静态函数
我是 GNUradio 的新手,我正在制作一个 FM 接收器。我正在将数据记录到文件接收器中。但是我只需要1毫秒的数据。我如何指定这个时间,以便我的流程图在这个时间之后自动停止? 我还阅读了一些关于调
如何计算特定带宽内信号的平均功率并将该值存储在一个变量中供以后引用? 例如,我有一个 15kHz 宽的低通滤波器,我想知道 GNU Radio Companion 中是否有一个工具可以让我计算特定时间
我有 2 个枚举 enum class Enum1{ X1, X2, X3, X4; companion object { val default = X2 }
如果我有一个看起来像这样的(简化的)类: class MyManager @JvmOverloads constructor(/*constructor args*/) : MyManagerInte
我正在使用 Companion library用于将视频从我的应用转换到 Chromecast。有什么办法可以添加字幕/隐藏式字幕切换按钮,以便用户能够打开和关闭它们吗? 我正在阅读他们的 docum
tl:博士;是否可以 import 另一个类的伴生对象内的方法,无需使用 Companion 限定导入?也就是说,假设 toFoo 是一种方法,我是否可以说 import Bar.toFoo 而不是
我正在尝试使用 GNURadio Companion GUI 创建一个分层 block 。我在其他帖子中找到的答案说选择要合并的 block ,然后转到“更多”->“创建层次”。然后应该会出现一个新屏
我遇到了 Companion Objects 选择其类型而不是 case 类的问题 我正在使用喷雾 json serdes。他们需要一个隐式的 JsonFormat。这种格式是通过调用一个依赖于案例类
在 IntelliJ IDEA 中,是否有键盘快捷键或导航快捷键可以在 Scala 伴侣之间跳转object和一个同伴 class ? 最佳答案 似乎答案是否定的,没有。 关于scala - Inte
我正在尝试使用 Cast Companion 库实现音量控制。不过,我有点困惑应该怎么做。 最初,我一直在使用 VideoCastManager.onDispatchVolumeKeyEvent,它运
我正在使用 Cast Companion Library,它大部分工作正常,我有迷你播放器,还有锁屏控件和播放内容的 Activity ,但我永远无法显示通知屏幕。初始化时我正在执行以下操作: mCa
我正在按照教程部署 Wordpress使用 Docker在 Ubuntu服务器。教程在这个website . 值得一提的是,此时我已经有两个子域,一个用于 Wordpress 站点,另一个用于 php
我是一名优秀的程序员,十分优秀!