1.27
如果需要覆盖默认的getter、setter,应将字段设为private,字段名一般为getter/setter名(即对外形式的字段名)前加下划线_,类中定义getter方法def ={},和setter方法def _=(s:Type){}。
通过注解@BeanProperty标注字段(或主构造器中的val/var参数)可(额外)生成java bean 风格的getter/setter(对val字段则只有getter)。
(类定义体中的)字段定义时不提供初始值则被认为是抽象字段(要求类是抽象类),对val/var字段皆如此,初始值可由代码块产生的返回值提供。
class P(val name:String, var age:Int) {
}
// $javap -private P.class
/* output ==>
public class P {
private String name;
public String name(){...}
private int age;
public int age(){...}
public int age_$eq(int){...}
public P(){...}
}
*/
object app extends App {
val p=new P("Jack Ma", 54)
println(p.name)
p.age = 50 // in java, p.age_$eq(60)
println(p.age)
}
package com.exmaple.access
class FieldAccessorExample( val age:Int /* public */){
private var a = 0
private[this] var b = 0 // this instance accessible
private[access] var c = 0 // accessible in this ‘access’ package
private[exmaples] var d = 0 // NOT be: private[com.exmaple]
private[com] var d1 = 0
// private[another] var dx = 0 // may NOT be other packages, neither subpackages
}
// private[this|<Class>]
class Girl{
private[this] var age:Int
//! def isOlder(that:Person) :Boolean= this.age > that.age // compilation ERROR, NOT accessible in other instances
}
class Girl{
private[Girl] var age:Int
def isOlder(that:Person) :Boolean= this.age > that.age // OK
}
class JavaBeanExmaple (@BeanProperty var age:Int) {
@BeanProperty var name:String = _
// yield 4 methods: String name(); void name_$eq(String); String getName(); void setName(String);
}
// getter/setter customizing
class Person {
private var _name: String = _
private var _age: Int = _
def name= _name
def name_= (newName:String){
if(newName=="Lady Gaga")throw Illegal("NOT allowed: her tracks are noisy")
_name = newName
}
}
// field declaration & initialization
class SomeClass{
val text={
var lines=""
try{
io.Source.fromFile("a.txt").getLines.mkString()
}catch{
case e:Exception=> lines="ERROR"
}
lines
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统