4 ms·
Since Java lacks generics, there are many kinds of code which require duplicate code in Java. Specifically, every place where you would use generics in another
by cia_plant 17y ago
Since Java lacks generics, there are many kinds of code which require duplicate code in Java. Specifically, every place where you would use generics in another language (Templates in C++, or TypeClasses in Haskell, for instance).
- hazzen 17y agoJava definitely supports generics as of 1.5 - did you mean that it doesn't support generics to the extent of C++? Most basic uses (containers) are identical between the languages, and while Java doesn't allow compile-time "duck typing" that C++ does, you can fake it by using the "? extends SomeInterface" syntax.
- cia_plant 17y agoJava supports type erasure, which it idiosyncratically calls "generics", even though it does not allow generic programming. A generic function in a language with actual generics can work generically, on more than one type. A "generic" function in Java can work on exactly one type, namely the type which the "generic" type becomes after type erasure. You can use "? extends SomeInterface" only if you write SomeInterface wrappers for every type which you want to use "generically." This is boilerplate relative to most other languages.
- hazzen 17y agoPersonally, I find this boilerplate equivalent to the comments one has to write documenting the requirements of the type, with the added benefit of readable error messages when you pass the wrong type. In other words, I find: // T here is a type that must support these two operations: // bool froznit(); // void frobnob(Foo* foo); template <class T> class Frozner { ... } And public interface SomeStupidName { public bool froznit(); public void frobnob(Foo foo); } public class Frozner<? extends SomeStupidName> { ... } To be just as much work to type.