@numa08 猫耳帽子の女の子

明日目が覚めたら俺達の業界が夢のような世界になっているとイイナ。

Javaでパターンマッチをやってみた

f:id:numanuma08:20131119232402p:plain

深淵からの呼び声

今日は昼寝をしていたら、謎の声が天から聞こえてきました。

きっとこれは、深淵からの呼び声だと思います。なので、ちょっとコードを書いてみました。

まずはScala

Scalaで書くとこうなります。普通ですね。

  abstract class Name
  case class FirstName(name:String) extends Name
  case class LastName(name:String) extends Name
  
  def printName(name : Name) :Unit = {
    name match {
      case FirstName(name) => println(name)
      case LastName(name) => println(name.toUpperCase)
      case _ => {}
    }
  }

  printName(FirstName("numa"))  //numa
  printName(LastName("numa08")) //NUMA08

case classによるパターンマッチ、Akka使うときに結構活躍します。

悲しみあふれるJava

Javaだとこうですかね

    public static abstract class Name extends Exception{}
    
    public static class FirstName extends Name {
        private final String name;

        public FirstName(String name) {
            super();
            this.name = name;
        }

        public String name() {
            return name;
        }
    }
    
    public static class LastName extends Name {
        private final String name;

        public LastName(String name) {
            super();
            this.name = name;
        }

        public String name() {
            return name;
        }
    }
    
    public static void printName(Name name) {
        try {
            throw(name);
        }catch (FirstName n) {
            System.out.println(n.name());
        }catch (LastName n) {
            System.out.println(n.name().toUpperCase());
        } catch (Name e) {
            e.printStackTrace();
        }
    }
    
    public static void invoke() {
        printName(new FirstName("numa"));  //numa
        printName(new LastName("numa08"));  //NUMA08
    }

こんなことして、一体だれが得するっていうんですか!!おとなしくinstanceof使ってくださいよ!! あるいは、ちゃんとポリモーフィズムを考えてくださいよ!!!

出番としては?何だろ、Exceptionを継承している時点で存在しないんじゃないですかね?