当前位置: 首页 > 知识库问答 >
问题:

Kotlin对象vs同伴对象vs包范围方法

慕容品
2023-03-14

我用Kotlin编写了这些方法并分析了字节码:

class A {
    object b {
        fun doSomething() {}
    }
}
class A {
    companion object b {
        fun doSomething() {}
    }
}
fun doSomething() {}
    null

上下文。我一直在Kotlin编码,我觉得它很神奇。但有时我需要做一个决定:例如,一个很重的不可变属性,在java中我会将其声明为static final,但在Kotlin中我发现很难“找到一个等价物”。

共有1个答案

漆雕彬彬
2023-03-14

我会建议开发voddan答案:

enum class Color {

    RED,
    BLUE,
    GREEN;


    companion object Utils {
        fun findById(color: Color): Color {
            return color;
        }
    }
}

和测试

@Test
fun testColor() {
    println(Color.Utils.findById(Color.valueOf("RED")));
}
 类似资料:
  • 问题内容: 我正在尝试验证实例属性和类属性之间的区别,该区别由2012年11月1日发布的Python教程2.7.3版第9章:类,第66页最后一行( 源 ): 实例对象的有效方法名称取决于其类。根据定义,作为函数对象的类的所有属性都定义了其实例的相应方法。因此,在我们的示例中,xf是有效的方法引用,因为MyClass.f是函数,而xi则不是,因为MyClass.i不是。 但是xf与MyClass.f

  • 如您所知,< code>java.util.Objects是 这个类由用于操作对象的静态实用程序方法组成。 其中一个方法是< code>Objects.isNull()。 我的理解是< code>Objects.isNull()会通过省略第二个< code>=来消除意外地将空值赋给object的可能性。 但是,API注释指出: 此方法存在,可用作谓词、筛选器(对象::isNull) 是否有任何原因

  • 所以我有下面的代码,用Kotlin写的。 我在最后一条指令行()上得到一个编译错误,编译器说,但我不知道为什么。 我认为同伴对象应该对它们“陪伴”的类的属性具有某种可见性。 (免责声明:此代码正在从Java迁移到Kotlin。在Java版本上,以前是同一个类上的静态方法。) 多谢!

  • 问题内容: 如你所知,是 此类包含用于对对象进行操作的静态实用程序方法。 此类方法之一是。 我的理解是,通过省略第二个,可以消除意外地为对象分配空值的机会。 但是,API注释指出: 存在此方法用作谓词filter(Objects :: isNull) 会不会有任何理由/环境对我应该使用了在 if语句 ? 应该只限于谓词吗? 问题答案: 应该在if语句中的Objects.isNull()上使用obj

  • 带有同伴对象的简单示例类 值测试可以通过访问,但如何从MyClass的实例访问?如果我有,那么我如何从sample访问测试?不正确....有没有办法? Java,C++,python等都有很简单的解决方案...(我将为每个有帮助的is提供代码示例),我认为kotlin会有一个比使用Java更好的解决方案。 对于在没有对象实例(如工厂)的情况下访问类属性,kotlin companion objec

  • 在Kotlin的类中,一个对象和一个同伴对象有什么区别? 它的“静态”(我是java方面的)生命周期可能有区别吗?