Kotlin 使用class 主构造和成员属性传参问题
作者:互联网
//枚举上声明的属性 如果不加 var/val 就不是 成员 属性!!!,不能用this.xxx ,所有内部传入这些参数时候要特别注意
//没有val/var 就是一次性的参数,并不是成员属性!!!
enum class MyFont(
val fontname: String,
val encoding: String = BaseFont.IDENTITY_H,
val embedded: Boolean = BaseFont.EMBEDDED,
val size: Float = 16F,
val style: Int = Font.BOLD,
val color: Color = Color.RED
) {
F_STD_EN("lhandw"),
F_STD_CN("stxingka"),
F_STXINGKA("stxingka"),
F_LHANDW("lhandw"),
F_NOTO_SANS("notosans-vf"),
F_SCRIPT_BL("scriptbl"),
F_SEGOEPR("segoepr"),
F_SEGOEPR_B("segoeprb"),
F_SOURCE_HAN_SANS_CN("sourcehansanscn-vf"),
F_SOURCE_HAN_SANS_SC("sourcehansanssc-vf"),
;
// init {
// p("initiatie MyFont")
// }
companion object {
//这个里面无法debug!!!
init {
p("instantiate MyFont constants")
val fontFiles = arrayOf(
"LHANDW.TTF",
"NirmalaB.ttf",
"NotoSans-VF.ttf",
"SCRIPTBL.TTF",
"segoepr.ttf",
"segoeprb.ttf",
"SourceHanSansCN-VF.ttf",
"SourceHanSansSC-VF.ttf",
"STXINGKA.TTF"
)
for (i in fontFiles) {
register(fontPath(i), alias(i))
}
}
}
//secondary ,default private
// constructor( fontname: String,
// encoding: String = BaseFont.IDENTITY_H,
// embedded: Boolean = BaseFont.EMBEDDED,
// size: Float = 16F,
// style: Int = Font.BOLD,
// color: Color = Color.BLUE) {
// this.font = newFont(fontname, encoding, embedded, size, style, color)
// }
//默认先使用的主构造上没有 val的变量是不能使用 this.xxx!!!相当于一次性使用的函数参数!!!
//主构造 无论是 加不加 var/val ,都不行!!!
//无论主构造还是第二构造都不行 !!!
//font 成员 不对 是null
//估计与companion object 的初始化 顺序有关系吧, 外部类 和内部内 static/init 初始化的先后顺序是不确定的!!!
// val font: Font // = newFont(this.fontname, this.encoding, this.embedded, this.size, this.style, this.color)
//不行没用的
// val font: Font // = newFont(fontname, encoding, embedded, size, style, color)
var font: Font? = null
get() {
//不能只用font属性,会产生循环调用,不知道内部是怎么翻译java代码的
if(Objects.isNull(field)){
p("fontname:",fontname,)
field = newFont(fontname, encoding, embedded, size, style, color)
}
return field
}
}
1.主构造上没有 val/var 就不是成员变量了,就是临时的像函数参数一样的变量!!!
即使是 类 也有 函数参数 和 成员属性 的区别
2.成员属性 val/var 变量 = initialzer,如果这个initializer的初始化参数是 主构造
或者是第二构造 传过来的参数 或者 成员属性 ,都是没用的,极有可能隐藏错误,感觉这里有 java 的
init 初始化 和 构造函数初始化 先后顺序的问题?
3.companion object 的初始化 和 外部类 的初始化 感觉先后顺序不确定,调用的时候,一定要注意。
4.在1.5.31中 kotlin companion object的init <=> java 外部类 static {} ? 不知道以后会不会变。
5.属性值 用get 和 set 时候 不能用 属性变量,否则就 递归 了(这时候的属性就是getXXX),最好用 field 来表示 其值。
标签:传参,fontname,val,Kotlin,style,ttf,font,class,属性 来源: https://blog.csdn.net/xiuye2015/article/details/120802056