代码之家  ›  专栏  ›  技术社区  ›  Angelina

Kotlin同伴反对未解决的参考文献

  •  0
  • Angelina  · 技术社区  · 6 年前

    我有一个Kotlin类,它有一个同伴对象,可以看到父类的一些字段,而看不到其他字段。android studio中没有可导入的选项。

    class A{
       var a = 1
       var b = 2
           companion object {
                a += 1// visible and imported
                b += 1// unresolved reference
           }
    }
    

    我不想在伴生对象内创建此变量。

    3 回复  |  直到 6 年前
        1
  •  2
  •   Andrey Danilov    6 年前

    你完全不正确。

    您根本无法访问伴生对象中的类成员。但是你可以在你的班级里使用同伴的成员。

    如果您看到kotlin字节码,您将看到伴随对象编译为

       public static final class Companion {
          private Companion() {
          }
    
          // $FF: synthetic method
          public Companion(DefaultConstructorMarker $constructor_marker) {
             this();
          }
       }
    

    因为同伴是 static class 它可以在没有声明它的类的情况下存在。

    所以在您的情况下,您不能访问a和b,因为它们可能不存在。

    它们对你来说也是不可访问的,但是可能你会咳嗽出ide错误,它不会给你错误。

        2
  •  0
  •   Samuel Eminet    6 年前

    不能从静态上下文访问实例变量(同伴),这与Java代码相同。

        3
  •  0
  •   Alexey Romanov    6 年前

    android studio导入了一个类变量。在imports中,我看到import package.a.a,但没有import package.a.b

    import package.A.a 对于类属性来说根本没有意义 a ,而伴生对象不需要 import 不管怎样,它是班上的同伴。我最好的猜测是它是从 object 换个包装。