Continue reading “Why a Consumer is not a Function.”
java.util.function.Consumer does not extend
java.util.function.Function. But what if you want a set of both types? Why isn’t there a ConsumerFunction?
A ConsumerFunction is not defined in
java.util.function. You can easily do it yourself. But you will see that it’s not that simple.
void is a keyword in Java. There is a class
Void and (by reflection) you can even get an instance of
Void. But you have to use a return statement to get a
This is often asked at interviews. I’ll explain when to answer “yes” and when to answer “no”.
Continue reading “Is Java object-oriented?”
They do! And so do most online tutorials. Buy a good book instead!
Continue reading “Blogs about Programming suck!”
So it’s functional, right? Then why isn’t it a function? I’ll try to explain.
Continue reading “Misnomer: @FunctionalInterface”
There are many articles and blog posts about this topic but rarely are they complete. I’ll cover finalizers, Finalizer Guardian idiom, Dispose Pattern, PhantomReference and Cleanable.
Continue reading “How to replace Object.finalize()”
Run code only once!
Project hosted on github: https://github.com/claudemartin/LockOnce
It’s just one single utility class to make sure code is run only once. And then there’s another one for easy “Lazy Initialization”.
I once wrote this for Java 7 but now it needs Java 8. It makes much more sense to use this with Lambdas. It’s a bit like the lazy keyword of Scala.
// declaration of lazy field:
final Supplier<Foo> lazy = Lazy.of(() -> ...);
// Access to the data:
Foo foo = lazy.get();
You can also register a “destructor”. This solves the problem that such fields (they are usually
static final) are never GCd and finalizers are utterly useless. In the same way you can have resources (they just have to implement
AutoClose) closed on shutdown.
There already is
sun.misc.Cleaner. And Java 9 should even have
java.util.Cleaner or something like that. I simply didn’t know. So it’s better to wait for Java 9 or use
If you are still interested:
I have a blog post about Finalizers and PhantomReferences:
I did this because
EnumSet is in fact a bit set (if it’s not a
JumboEnumSet) but it can’t be used as such. I ended up writing a complete library for domain bit sets.
Project website: http://claude-martin.ch/enumbitset/
Project home @ GitHub: https://github.com/claudemartin/enum-bit-set
So there’s a class named Class. But it represents interfaces, annotations and enums too. What’s up with that?
Continue reading “Misnomer: The class named Class”
Some think “List” is a misnomer. I don’t even mind so much. I think List is ok.
I just put this here because there already is an entry in the FAQ:
Why don’t you rename the List interface to Sequence; doesn’t “list” generally suggest “linked list”? Also, doesn’t it conflict with java.awt.List?
PS: Vector is strange, though. It is synchronized and it really should be
SynchronizedList. But it is defacto deprecated. So who cares?