【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()));  
  }  
}

非常に苦しい書き換えとなってしまった。

コメント

このブログの人気の投稿

【KotlinとJava】分解宣言

wxPythonでのモーダルダイアログ作成