News for hackers. Stuff that matters.
Re:Diminishing returns of static typing by mattnewton on Monday October 02, 2017 @02:01PM (#15386215)
Agreed, every time I had to patiently explain to javac that shockingly, my new ArrayList<T> was a List<T>, my new FooBar was a FooBar, and always would be, it drove me slowly mad. Still, I was thankful for the static types when trying to understand where this strange object came from and what it was supposed to do. I’m glad we have modern languages that have the potential to do an even better job of that without a lot of the verbosity.
Re:Diminishing returns of static typing by breischl on Monday October 02, 2017 @03:42PM (#15387250)
Those things are indeed obnoxious, but they are truly _Java_ issues rather than static typing issues. For instance, C# will figure that stuff automatically in many cases using the _var_ keyword. The Lombok plugin can add something like that into Java, although it's only about 80% as good because of other Java limitations, primarily type erasure.
Re:Diminishing returns of static typing by mattnewton on Monday October 02, 2017 @06:36PM (#15388570)
I agree. While I have never used C# in anger I have played with enough other (non-Java staticky typed) languages to know that it doesn’t have to be this bad :D
Re:Diminishing returns of static typing by nradov on Monday October 02, 2017 @03:07PM (#15386894)
While it may be frustrating to novice programmers, the distinction between interfaces (List) and implementation classes (ArrayList) is quite valuable, especially when dealing with huge code bases that have to be maintained over decades. Those declarations help to establish an internal design contract and clarify the developer's intent. In this particular case, a future maintenance programmer could switch from ArrayList to any other class which implements the List interface without breaking the program.
Re:Diminishing returns of static typing by nicoburns on Monday October 02, 2017 @06:32PM (#15388544)
True, but there are more elegant solutions. For example, Rust's traits allow you to define a trait (somewhere in between an interface and an abstract class in Java), and then methods can be generic over any object that implements that trait. And structs and traits have a many-to-many relationship.

This allows you implement patterns like duck typing which are idiomatic in languages like javascript, but impossible to implement in java.

Re:Diminishing returns of static typing by x0x0 on Monday October 02, 2017 @05:56PM (#15388305)
Which happens exactly how often? I've been writing java code for the better part of two decades and basically never needed to swap my list/set/map types around. Also, one of the purported benefits of java's typing is your editor can find and refactor / swap all usages, so it doesn't seem to me like this distinction has much value. It instead makes me think it's a fetish for object orientedness...

In fact, the only cases I've ever swapped even a HashMap has been to trove, which implements data structures for builtin types rather than reference types. In which case using interfaces everywhere doesn't help.

Re:Diminishing returns of static typing by mattnewton on Monday October 02, 2017 @03:43PM (#15387267)
It’s not about having the difference, it’s about having to explain to Javac what I am using because it’s incapable of doing meaningful type inference.
Re:Diminishing returns of static typing by vkou on Monday October 02, 2017 @04:37PM (#15387709)
Only in the case of generic erasure, which is a Java wart that we will, sadly, never eliminate.
Re:Diminishing returns of static typing by macspoofing on Monday October 02, 2017 @03:02PM (#15386841)
Generics in Java have well known limitations stemming from type erasure (a design decision made to preserve backwards compatibility). Things aren't quite as dire as you made them out to be and in the general case, they work quite well.