kotlin入门(一)
kotlin入门(二)
kotlin入门(三)
注意: 部分代码来自 https://try.kotlinlang.org/#/Examples/
类
不需要new关键字就能新建对象:
fun main(args: Array<String>) {
Greeter("world").greet();
}
class Greeter(val name: String) {
fun greet() {
println("Hello, ${name}");
}
}
构造函数
fun main(args: Array<String>) {
Greeter("world").greet();
}
class Greeter () {
var mName: String = ""
constructor(name: String) : this() {
println("constructor")
this.mName=name
}
init{
println("init") //init代码块会在构造函数之前执行
}
fun greet() {
println("Hello, ${mName}");
}
}
拷贝函数
data class User(val name: String, val id: Int)
fun main(args: Array<String>) {
val user = User("Alex", 1)
println(user) // toString()
val secondUser = User("Alex", 1)
val thirdUser = User("Max", 2)
println("user == secondUser: ${user == secondUser}")
println("user == thirdUser: ${user == thirdUser}")
// copy() function
println(user.copy())
println(user.copy("Max"))
println(user.copy(id = 2))
println(user.copy("Max", 2))
}
泛型
此处的例子是Pair类:
fun main(args: Array<String>) {
val pair = Pair(1, "one")
println("${pair.first} , ${pair.second}")
val (num, name) = pair
println("num = $num, name = $name")
}
class Pair<K, V>(val first: K, val second: V) {
operator fun component1(): K {
return first
}
operator fun component2(): V {
return second
}
}
HashMap
fun main(args: Array<String>) {
val map = hashMapOf<String, Int>()
map.put("two", 2)
map.put("one", 1)
for ((key, value) in map) {
println("key = $key, value = $value")
}
}
ArrayList
val test = ArrayList<String>()
test.add("111");
test.add("222");
for (i in test.indices){
println(test.get(i))
}
List
挑出所有的奇数:
fun main(args: Array<String>) {
val numbers = listOf(1, 2, 3)
println(numbers.filter(::isOdd))
}
fun isOdd(x: Int) = x % 2 != 0
挑出所有长度为奇数的字符串:
fun main(args: Array<String>) {
val oddLength = compose(::isOdd, ::length)
val strings = listOf("a", "ab", "abc")
println(strings.filter(oddLength))
}
fun isOdd(x: Int) = x % 2 != 0
fun length(s: String) = s.length
fun <A, B, C> compose(f: (B) -> C, g: (A) -> B): (A) -> C {
return { x -> f(g(x)) }
}
将java代码移植到kotlin
java代码, 作用是将数字集合转化成json字符串:
public String toJSON(Collection<Integer> collection) {
StringBuilder sb = new StringBuilder();
sb.append("[");
Iterator<Integer> iterator = collection.iterator();
while (iterator.hasNext()) {
Integer element = iterator.next();
sb.append(element);
if (iterator.hasNext()) {
sb.append(", ");
}
}
sb.append("]");
return sb.toString();
}
kotlin代码:
fun toJSON(collection: Collection<Int>): String {
val sb = StringBuilder()
sb.append("[")
val iterator = collection.iterator()
while (iterator.hasNext())
{
val element = iterator.next()
sb.append(element)
if (iterator.hasNext())
{
sb.append(", ")
}
}
sb.append("]")
return sb.toString()
}
奇怪的kotlin语法(把 IF 表达式的结果赋值给一个变量)
fun main(args: Array<String>) {
val a = 1
val b = 2
val max = if (a > b) {
print("Choose a")
a
} else {
print("Choose b")
b
}
print(max);
}
输出结果是:
Choose b2
读取文件, 放到一个字符串里输出
var text = File("C:\\Users\\Administrator\\Desktop\\1.txt").readText()
println(text)
读取文件的每一行并输出: 方法一
val inputStream: InputStream = File("C:\\Users\\Administrator\\Desktop\\1.txt").inputStream()
val lineList = mutableListOf<String>()
inputStream.bufferedReader().useLines { lines -> lines.forEach { lineList.add(it)} }
lineList.forEach{println(it)}
读取文件的每一行并输出: 方法二
File("C:\\Users\\Administrator\\Desktop\\1.txt").useLines { lines -> lines.forEach { println(it) } }
发送网络请求
val html = URL("//www.greatytc.com").readText()
println(html)
利用gson解析json
在gradle中先引入gson:
compile group: 'com.google.code.gson', name: 'gson', version: '2.8.2'
fun main(args: Array<String>) {
val gson = Gson()
var user= User(100L, "jim", "....");
val json = gson.toJson(user);
println(json)
var user2 = gson.fromJson(json, User::class.java )
println("id="+user2.id+", name="+user2.name)
}
data class User(
@SerializedName("id") val id: Long,
@SerializedName("name") val name: String,
@SerializedName("description") val description: String
)