频道栏目
首页 > 资讯 > 云计算 > 正文

类的定义方式、字段的可见性、getter和setter方法、设置未初始化的var字段类型

17-11-09        来源:[db:作者]  
收藏   我要投稿

类的定义方式

class Persion{
//这里是定义类的字段和方法
}

然后,就可以使用new关键字来生成对象:

val persion = new Persion
//或者
val persion = new Persion()

字段的可见性

1、如果为var字段,scala会为其自动生成访问getter和修改setter方法。
2、如果字段为val,只会生成getter方法。
3、如果字段没有var或者val,不会自动生成getter和setter。
4、如果被private修饰,就可以防止生成getter和setter了。

举一个例子:

class Persion{
    var name = "Damien"
}

这个时候,你便可以使用这个方式为其赋值或者获取其值

val persion = new Persion()
println(persion.name)   //获取初始值
persion.name = "Abbyabbie"  //修改值
println(persion.name)   //打印新值

输出结果如下:

Damien
Abbyabbie

getter和setter方法

当遇到private的值时,scala中,getter和setter方法和java中并不一样。在Scala中,可以通过定义类似getter和setter的方法,分别叫做value和value_=,注意,这里的“value_=”等号前后一定不能有空格,否则会有报错,value可以谁当为任意的名字

class Persion{
    private var name = "Damien"
    def value = name //setter
    def value_=(newValue: String){
        name = newValue //getter
    }
}

Object Test{
    def main(){
        val persion = new Persion
        println(persion.value)  //打印value的初始值、getter
        persion.value = 3 //为value设置新的值、setter
        println(persion.value)  //打印value的新值

    }
}

通过上面这种方式就可以方位private变量了。

设置未初始化的var字段类型

很多时候我们需要未初始化,好比如这样” var x = “。在什么场景会用到?你想想注册时候,是不是很多都是先填写一个用户名和密码,后续才让你补充详细信息?年龄姓名都好说,比如

var age = 0
var firstName = ""
var lastName = ""

但是地址怎么办呢,也是这样成这样?很显然是不合理的。这里提供了一种Option操作,如下:

object Test {
  def main(args: Array[String]): Unit = {

    val p = Persion("aaa","bbb")
    p.address = Some(Address("bj", "CN", "2008"))
    p.address.foreach{
      a =>
        println(a.city)
        println(a.state)
        println(../../article/20220623/file.html)
    }
  }
  case class Persion(var username: String, var password: String){
    var age = 0
    var firstName = ""
    var lastName = ""
    var address = None: Option[Address]
  }
  case class Address(city: String, country: String, zip: String)
}

字段没有值,address就是一个None,访问其值可以用foreach,并且如果为空,循环会被跳过。如果address有值,它会是一个Some[Address],foreach会循环打印出来,或者做你设定的操作。

Case

在上面出现过case这么个东西,他就是用来生成模板代码的一个类。它会生成一个apply方法,就可以不用new关键字创建新的实例了。
其参数默然为val,会自动生成访问方法。如果你写了var的参数,会提供修改方法。
默认提供一个toString方法

scala> case class Persion(name: String, relation: String)
defined class Persion
scala> val emily = Persion("Emily", "niece)
emily: Persion = Persion(Emily,niece)
//↓ toString ↓
scala> emily
res0: Persion = Persion(Emily,niece)

方法定义

def fun(int x): String = {
    //code
}
//可以简化为
def fun(i: Int) = i + 1

在scala中,返回值类型不是必须的,在方法体很短的时候,花括号也不是必须的。

scala中的方法一样可以继承父类的方法:

class Father{
    def sayHello { println("HelloMaster")}
}
class Kids extends Father{
    def sayNihao {
        super.sayHello
    }
}
相关TAG标签
上一篇:oracle查询当前运行的进程、查询被锁的对象、杀Seesion的SQL、设置SQL语句计时等教程
下一篇:Oracle如何查询表空间使用情况?Oracle扩展表空间的方法
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站