Static vs. Dynamic Languages
Let's close this subject once and for all.
Packers always prefer to pile up more nonsense, be it more Java code over poor designed classes with wrong abstractions or mere irrelevant argumentation, instead of trying to reduce the issue to the first principles.
There is the notion of Strong typing as opposed to Weak typing. Strong typing is the must and it is good enough.
Strong typing means that each piece of data has a type information associated with it and this type information is immutable - cannot be changed, while a value of one type could be explicitly coerced into a new value of other type. Immutability, as in Math, is a big idea.
Type annotations should be optional, when either type-inference system failed or it is reasonable to add an annotation to clarify the code.
Optional type annotations could be found in Common Lisp, Haskell, Erlang, Julia, to some extend in Standard ML, etc. as opposed to a mandatory type declarations in Java and other packer's languages.
Moreover, a value could belong to this AND that type as it is in Common Lisp, instead of this OR that type.
What is static typing then?
Requirements of a programmer to explicitly specify a type for each variable as they proudly do in Java ?This is fucking packer's nonsense.
[Static vs. Dynamic Languages: A Literature Review http://danluu.com/empirical-pl/]