【KotlinとJava】Mapとプロパティ
KotlinとJava
Kotlinでは代入の際にMapを利用することができる。Javaのサンプルと比較するとよく分かるが、とても簡潔に記述できるようになっている。
Properties in map.kt
class User(val map: Map<String, Any?>) {
val name: String by map
val age: Int by map
}
fun main(args: Array<String>) {
val user = User(mapOf(
"name" to "John Doe",
"age" to 25
))
println("name = ${user.name}, age = ${user.age}")
}
Mapのキー名は文字列で指定しているが、間違っていると実行時にエラーが発生するので注意すること。このあたり、コンパイラのサポートはないようだ。
Javaで記述
対比ができるようにJavaでも同じものを記述してみよう。
public class User {
private String name;
private Integer age;
public User(Map<String, Integer> map) {
for (String key : map.keySet()) {
this.name = key;
this.age = map.get(key);
break;
}
}
public String getName() {
return name;
}
public Integer getAge() {
return age;
}
}
public class Exp21 {
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<>();
map.put("John Doe", 25);
User user = new User(map);
String template = "name = %s, age = %d";
System.out.println(String.format(template,
user.getName(), user.getAge()));
}
}
非常に苦しい書き換えとなってしまった。
コメント
コメントを投稿