The other objection that’s been leveled against static type systems is that they constrain you too much in what you want to express. People say, “I want to express myself freely. I don’t want a static type system getting in the way.”
In my experience in Scala this has not been true, I think for two reasons. The first is that the type system in Scala is actually very flexible, so it typically lets you compose things in very flexible patterns, which a language like Java, which has a less expressive type system, would often make more difficult. The second is that with pattern matching, you can recover type information in a very flexible way without even noticing it.