深淵からの呼び声
今日は昼寝をしていたら、謎の声が天から聞こえてきました。
Javaでtry-catchをパターンマッチに使うとか恐ろしいことが聞こえてきた…
— numa (@numa08) 2013, 11月 19
きっとこれは、深淵からの呼び声だと思います。なので、ちょっとコードを書いてみました。
まずは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を継承している時点で存在しないんじゃないですかね?