【Kotlin】泛型 ② ( 可变参数 vararg 关键字与泛型结合使用 | 使用 [] 运算符获取指定可变参数对象 )
创始人
2024-05-16 01:03:48

文章目录

  • 一、可变参数 vararg 关键字与泛型结合使用
  • 二、使用 [] 运算符获取指定可变参数对象





一、可变参数 vararg 关键字与泛型结合使用



如果 泛型类型 T 的参数 是 vararg 可变参数 , 则在接收 可变参数 时 , 需要使用 Array 类型 的变量进行接收 ;

参数为 vararg 可变参数 , 那么可以传入多个 指定类型的 实例对象 ;


在下面的代码中 , 声明了 泛型参数 T , T 类型不必须是 Weapon 类的子类类型 ;

在 Soldier 的主构造函数中 , 传入了 泛型 T 类型的 可变参数 对象 ;

如果要使用 成员属性 接收该 泛型 T 类型的 可变参数 对象 , 则必须 使用 Array 类型对象进行接收 ;


代码示例 :

class Soldier(vararg _items: T) {var items: Array = _itemsfun fight(){for (item in items) {item.fire()}}
}open class Weapon(var name: String){open fun fire(){println("weapon fire !")}
}
class AK47: Weapon("AK47"){override fun fire(){super.fire()println("AK47 fire fire !")}
}
class T72: Weapon("T72"){override fun fire(){super.fire()println("T72 fire fire !")}
}fun main() {var soldier: Soldier = Soldier(AK47(), T72())soldier.fight()
}

执行结果 :

weapon fire!
AK47 fire fire !
weapon fire!
T72 fire fire !




二、使用 [] 运算符获取指定可变参数对象



如果想要 使用 [] 运算符获取指定可变参数对象 , 就需要 重写 该类 的 get 函数 进行 运算符重载 ;

在这里插入图片描述


如果想要通过 Soldier 实例对象[] 运算符获取其 items: Array 中的某个元素 , 则需要重写该类的 get 方法 ;

    var items: Array = _itemsoperator fun get(index: Int): T? {return items[index]}

之后使用 soldier[0] 即可获取 items 可变参数中的实例对象 ;

    var soldier: Soldier = Soldier(AK47(), T72())soldier[0]?.fire()soldier[1]?.fire()

代码示例 :

class Soldier(vararg _items: T) {var items: Array = _itemsoperator fun get(index: Int): T? {return items[index]}fun fight(){for (item in items) {item.fire()}}
}open class Weapon(var name: String){open fun fire(){println("weapon fire !")}
}
class AK47: Weapon("AK47"){override fun fire(){super.fire()println("AK47 fire fire !")}
}
class T72: Weapon("T72"){override fun fire(){super.fire()println("T72 fire fire !")}
}fun main() {var soldier: Soldier = Soldier(AK47(), T72())soldier[0]?.fire()soldier[1]?.fire()
}

执行结果 :

weapon fire!
AK47 fire fire !
weapon fire!
T72 fire fire !

相关内容

热门资讯

长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...