Kotlin中常量和静态方法

作者: 会撒娇的犀犀利 | 来源:发表于2018-01-31 18:04 被阅读437次

    常量

    Java代码:
       class StaticDemoActivity {
             public static final String LOAN_TYPE = "loanType";
            public static final String LOAN_TITLE = "loanTitle";
        }
    
    Kotlin中:
      class StaticDemoActivity {
          companion object {
               val  LOAN_TYPE = "loanType"
               val  LOAN_TITLE = "loanTitle"
        }
    }
    
    或者
    
      class StaticDemoActivity {
          companion object StaticParams{
                val   LOAN_TYPE = "loanType"
                val   LOAN_TITLE = "loanTitle"
        }
    }
    
      注:
            companion object的名字可以省略,可以使用Companion来指代
    
    引用常量(这里的引用只针对于java引用kotlin代码)

    TestEntity类引用StaticDemoActivity中的常量

       class TestEntity {
            public TestEntity () {
                String title = StaticDemoActivity.Companion.getLOAN_TITLE();
        }
      }
    
      或者
    
      class TestEntity {
            public TestEntity () {
                String title = StaticDemoActivity.StaticParams.getLOAN_TITLE();
            }
      }
    

    静态方法

    Java代码:
          class StaticDemoActivity {
              public static void test(){
                    、、、
              } 
          }
    
    Kotlin中:
          class StaticDemoActivity {
              companion object {
                   fun test(){
                        、、、
                    }
              }
          }
    
      或者
    
           class StaticDemoActivity {
              companion object StaticParams{
                  fun test() {
                      、、、
                  }
              }
          }
    
    引用静态方法(这里的引用只针对于java引用kotlin代码)

    TestEntity类引用StaticDemoActivity中的静态方法

        class TestEntity {
              public TestEntity () {
                    StaticDemoActivity.Companion.test();
              }
        }
    
    或者
    
        class TestEntity {
              public TestEntity () {
                 StaticDemoActivity.StaticParams.test();
              }
        }
    

    相关文章

      网友评论

      • 65f3933d18d1:如果kotlin的静态方法中要引用Activity呢?要怎么办? like this
        companion object {
        private val mList = ArrayList<Fragment>()
        private val mAdapter = FragmentViewPagerAdapter(fragmentManager)
        }
        会撒娇的犀犀利:@hello_xb 这个我明白了 ,大致意思就是你想在companion object 中调用外部的activity上下文对象,然后调用不到,首先来说,companion object是一个静态的伴生类,因为它是静态的,所以它调用的变量也应该是静态的,就像java中的 静态方法如果要调用成员变量,这个成员变量也必须是静态的,所以是根本调用不到。

        这边我有一个解决方案是这样的:
        1、创建一个object关键字的静态类,这个类里面都是静态的:
        object DemoActivity{
        var mActivity :MyActivity= MyActivity()
        }
        2、如果在companion object中调用的话:
        companion object {
        var mAdapter= MyAdapter(DemoActivity.mActivity.supportFragmentManager)
        }
        这样的话就可以调用到了。
        还有一点就是不建议您将创建FragmentViewPagerAdapter放在companion object 中,因为创建成功会就是静态的成员变量,是随着类的加载而加载的,一般情况下,能少用静态变量就少用。
        当然也只是我的建议。
        65f3933d18d1:@会撒娇的犀犀利 我没有描述清楚,我的情况是这样的,
        companion object {
        private val mAdapter = FragmentViewPagerAdapter(fragmentManager)
        }
        我需要这个fragmentManager因为我要在下面的静态方法里使用,但是这个fragmentManager只能从activity里获取,我想RepairReportViewModel constructor(activity: AppCompatActivity)传过来,但情况是,我怎么也获取不到activity,这个该怎么办呢?
        会撒娇的犀犀利:在这个例子中需要引用这两个参数,如果是的话,你需要将private 改为 public, 在不影响调用的情况下,可以加入 const 关键字,就可以直接调用了 , 如果不加关键字,就需要通过Companion关键字来调用,companion object 中引用的是static的含义,表示静态

      本文标题:Kotlin中常量和静态方法

      本文链接:https://www.haomeiwen.com/subject/awelzxtx.html