• 【scala】getter和setter


    我们在用Java的时候经常把一些字段定义为private类型来完成封装,这样外界就无法访问。

    如果外界访问或者修改该字段的时候,只能通过该字段提供的getter和setter方法来实现。

    在Scala中是没有getter和setter一说的。

    用了value 和 value_= 来分别代替了getter和setter。

    下面我们看个例子

    class Counter{
        private var privateValue = 0;//私有变量,外界无法直接访问
        def value = privateValue;//定义一个方法,方法名为我们想要的字段的名称,代替getter
        def value_= ( newValue : Int ){//主语 value_= 是方法名字
             value =  newValue;
        } //注意,scala中默认方法是public的
    }
    object MyCounter{
        def main(args :Array[String]){
              val myCounter = new Counter;
              println(myCounter.value);//调用value方法访问value,相当于getter
              myCounter.value = 3 ;//为value设置新值,相当于setter
        }
    }
    

    注意,这里的value不是唯一名字,可以用别的名字。

    def age = privateAge;           def age_= (newAge :Int){ age = newAge;}

    myAge.age;//访问age           myAge = 3;//设置age为3

    其实Scala是对每个字段自动生成getter和setter方法的,不过你可以控制这个过程如下:

    ■ 如果字段是私有的,则getter和setter方法也是私有的   

      就是说明,当我们定义一个字段为私有的时候,自动生成的getter和setter也不能被外界使用了。

           就是我们不能在外界使用  点+字段  的方式来访问或者修改该字段了。

      我们可以通过自己改写scala的getter和setter来完成对私有变量的访问和修改,如上述。

    ■ 如果字段是val,则只有getter方法被生成 

      当我们需要getter和setter的时候,可以定义变量为var

      当我们只需要getter不需要setter的时候,我们可以定义变量为val

    ■ 如果你不需要任何getter或setter,可以将字段声明为private[this]

    我们要么在对私有变量设置访问方法的时候

    要么加上getter方法(对val字段而言)要么加上getter和setter方法(对var字段而言)

    但在Scala中,你不能实现只写属性,即带有setter但不带getter的属性。

  • 相关阅读:
    我为什么写博客
    Jquery选中行实现行中的Checkbox的选中与取消选中
    jquery中attr和prop的区别
    如何将.il、.res文件封装成dll文件
    修改VS2010生成的dll文件中的内容
    asp.net mvc4中自定义404页面
    asp.net EF6.0中出现未找到具有固定名称“System.Data.SqlClient”的 ADO.NET提供程序的实体框架提供程序解决办法
    ASP.NET中JSON的序列化和反序列化(转)
     WPF 控件总结
    C语言基础:二维数组 分类: iOS学习 c语言基础 2015-06-10 21:42 16人阅读 评论(0) 收藏
  • 原文地址:https://www.cnblogs.com/zzhangyuhang/p/8921737.html
Copyright © 2020-2023  润新知