赞
踩
一、在程序结构运算符主要有+-*/%^?
任何类都可以定义或者重载父类的基本运算符
通过运算符对应的具名函数来定义
对参数个数作要求,对参数和返回值类型不作要求
不能像Scala一样定义任意的运算符
二、来写一些实例
package net.println.kotlin.chapters
import javax.print.attribute.standard.MediaSize
/**
* @author:wangdong
* @description:Kotlin运算符的一些实例
*/
class Complex(var real: Double,var imaginary: Double){
//1.定义一个Complex类型+号运算符的方法
operator fun plus(other: Complex): Complex{
//实部real+虚步imaginary
return Complex(real + other.real, imaginary + other.imaginary)
}
//2.定一个Int类型的+号运算符的方法,返回Complex类型
operator fun plus(other: Int):Complex{
//实部real和虚步imaginary相加
return Complex(real + other,imaginary)
}
//3.定义一个返回Int类型的
operator fun plus(other: Any): Int{
return real.toInt()
}
//4.定义一个取模的方法,实部的平方+虚步的平方,结果开平方
operator fun invoke(): Double{
return Math.hypot(real,imaginary)
}
/**
* Returns a string representation of the object.
*/
override fun toString(): String {
return "$real + ${imaginary}i"
}
}
fun main(args: Array<String>) {
val c1 = Complex(3.0,4.0) //3+4
val c2 = Complex(2.0,7.5) //2+7.5
println(c1 + c2) //5.0 + 11.5i
println(c1 + 20) //23.0 + 4.0i
println(c1 + "Hello") //3
//取模
println(c1()) //5.0
}
三、包含in的数组的运算符
/**数组的包含关系*/
fun main(args: Array<String>) {
//-name <Name>
//数组的包含关系,例如传入一个["-name","hello","world"]
if ("-name" in args){
println(args[args.indexOf("-name") + 2]) //应该是输出world
}
}
四、类与类直接的运算,以书在桌子上为例
//书
class Book{
//infix 自定义运算符的中缀表达式。本没有on,自定义一个,不需要类名.方法即可调用
//传入任意类型,返回一个Boolean类型的参数
infix fun on(any: Any): Boolean{
return true
}
}
//桌子
class Desk
fun main(args: Array<String>) {
if(Book() on Desk()){
println("书在桌上")
}
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。