How to avoid large if-statements and instanceof

前端 未结 9 2378
盖世英雄少女心
盖世英雄少女心 2020-11-29 05:11

Animal

public abstract class Animal {
 String name;

 public Animal(String name) {
  this.name = name;
 }

}

Lion<

9条回答
  •  暗喜
    暗喜 (楼主)
    2020-11-29 06:09

    Pattern matching support in the language eliminates the need for the ugly visitor pattern.

    See this Scala code for example:

    abstract class Animal(name: String)
    
    class Lion(name: String) extends Animal(name) {
      def roar() {
        println("Roar!")
      }
    }
    
    class Deer(name: String) extends Animal(name) {
      def runAway() {
        println("Running!")
      }
    }
    
    object TestAnimals {
      def main(args: Array[String]) {
        val animals = List(new Lion("Geo"), new Deer("D1"), new Deer("D2"))
        for(animal <- animals) animal match {
          case l: Lion => l.roar()
          case d: Deer => d.runAway()
          case _       => ()
        }
      }
    }
    

提交回复
热议问题