Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在KOTLIN中作为静态变量访问对象_Kotlin - Fatal编程技术网

如何在KOTLIN中作为静态变量访问对象

如何在KOTLIN中作为静态变量访问对象,kotlin,Kotlin,我刚到科特林。我知道java中静态成员的概念。根据文档,对象的工作方式类似于静态类/单例,但我似乎无法从MainActivity访问它们。 从例子来看,在科特林,我想按照下面的方式做,但它似乎对我不起作用。我做错了?我想用宾语代替同伴宾语 标记.kt object TAG { var MainActivity : String? = null } class MainActivity : AppCompatActivity(){ override fun onCreate(

我刚到科特林。我知道java中静态成员的概念。根据文档,对象的工作方式类似于静态类/单例,但我似乎无法从MainActivity访问它们。 从例子来看,在科特林,我想按照下面的方式做,但它似乎对我不起作用。我做错了?我想用宾语代替同伴宾语

标记.kt

object TAG {
    var MainActivity : String? = null
}
class MainActivity : AppCompatActivity(){  
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        //Cannot find TAG.MainActivity as static variable like in Java
        TAG.MainActivity = MainActivity::class.java.canonicalName as String
    }
}
MainActivity.kt

object TAG {
    var MainActivity : String? = null
}
class MainActivity : AppCompatActivity(){  
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        //Cannot find TAG.MainActivity as static variable like in Java
        TAG.MainActivity = MainActivity::class.java.canonicalName as String
    }
}
我看过这篇文章,但不起作用

将所需对象放入伴生对象中,而它在Kotlin中的工作方式类似于静态

class MyClassWithStatics {
    companion object {
        const val SOME_CONSTANT = "Hello!"

        @JvmField var someUglyMutableField: String = "don't do this like ever"

        @JvmStatic fun hello() { println("$SOME_CONSTANT $someUglyMutableField") }
    }
}
// consuming Java code!
public class MyOtherClass {
    public void doSomething() {
        String constant = MyClassWithStatics.SOME_CONSTANT;
        String someUglyMutableField = MyClassWithStatics.someUglyMutableField;
        MyClassWithStatics.hello();
    }
}
此外,在访问Kotlin类中的静态对象时,请检查此项以处理此问题

------------更新答案----------

OP想要一个顶级标记对象。 问题中提供的代码OP实际上是正确的。
问题是OP的Android Studio需要重启

----------我的原始答案(但仍可供参考)----------

将其放在伴生对象中是一个选项

class MainActivity : AppCompatActivity() {  

    //You can name this object here too (like "companion object shared")
    companion object {
        var TAG: String? = null
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        //Notice the ordering here. In fact, you don't even have to type MainActivity. You can just type TAG = ...
        MainActivity.TAG = MainActivity::class.java.canonicalName as String
    }
}

在您的类的其他地方可能有一个
标记
字段/属性?标签是否正确导入

这个简单的Kotlin程序工作时没有错误:

object Obj {
  var Hello = "World"
}

fun main(args: Array<String>) {
  println(Obj.Hello)
}

是的,但我不想把它放在类中,所以我更喜欢使用object。但我似乎无法访问它。我相信我的实现在每个文档中都是一样的,是的,但我不想把它放在一个类中,所以我更喜欢使用object。但我似乎无法访问它。我相信我的实现是相同的每个文档哦,我明白了。好的,您是否确保文件顶部的导入正确?您是否确保标记对象是顶级的?是的,我的导入是正确的。但是安卓工作室似乎没有意识到这一点,我知道这听起来很愚蠢,但是试着重新启动你的电脑和安卓工作室,因为你的代码对我来说很有用。哇。。我刚刚重新启动了我的Android Studio,它可以正常工作。也许是某种虫子吧?