1

Groovyでの型推論の簡単な例とその利点を誰かに教えてもらえますか? groovy に関する多くの記事と本を既に読みましたが、これに関する簡単な例を見つけることができませんでした。

4

2 に答える 2

4

以前、例を挙げて回答を書きました。animal()メソッドの戻り値の型が であることを確認し、def異なる型の 2 つのオブジェクトを返します。両方の共通のスーパータイプを推論します。

import groovy.transform.CompileStatic

@CompileStatic
class Cases {
  static main(args) {
    def bat = new Cases().animal "bat"

    assert bat.name == "bat" // Works fine

    assert bat.favoriteBloodType == "A+" // Won't compile with error 
                                         // "No such property: favoriteBloodType
                                         // for class: Animal"
  }

  def animal(animalType) {
    if (animalType == "bat") {
      new Bat(name: "bat", favoriteBloodType: "A+")
    } else {
      new Chicken(name: "chicken", weight: 3.4)
    }
  }
}

abstract class Animal {
  String name
}

class Bat extends Animal {
  String favoriteBloodType
}

class Chicken extends Animal {
  BigDecimal weight
}
于 2013-11-05T19:44:18.547 に答える
2

これは理解するのに十分簡単ですか?

def doSomething(a, b){
   a + b
}

//Type inferred to String
assert "HelloWorld" == doSomething('Hello','World')
assert "String" == doSomething('Hello','World').class.simpleName

//Type inferred to Integer
assert 5 == doSomething(2,3)
assert "Integer" == doSomething(2,3).class.simpleName

//Type inferred to BigDecimal
assert 6.5 == doSomething(2.7,3.8)
assert "BigDecimal" == doSomething(2.7,3.8).class.simpleName

//Type inferred to Double
assert 6.5d == doSomething(2.7d,3.8d)
assert "Double" == doSomething(2.7d,3.8d).class.simpleName
于 2013-11-05T19:06:01.333 に答える