It is neither made nor backed by any software (or any other type of) company, and it is offered to the public totally free of charge, both in binary and in source code forms, under the Apache License 2.0.
Yes, it's a kind of magic ;-).
The biggest problem for op4j is, strange as it seems, Java. During the long and painful development of the op4j concept, the authors felt they were achieving things that Java was simply not designed for. Java is terrific and we love it, but it is a highly bureaucratic language, strongly and statically typed, and it has been patched several times over the years in order to acquire some modern features with the requirement of not leaving legacy code behind -which has lead to some terrifying creatures like the current Generics implementation-. In this scenario, trying to bring to Java features (or more accurately, coding styles) which belonged more in the functional and dynamic programming worlds was really difficult.
This is why, realising that they were curling and twisting the language, pushing it to its limits and extracting every drop of juice it had to give, the authors felt like being bending the Java spoon. And that is what the +40K lines of code in op4j are about.
But it was worth it, wasn't it?
javaRuntype [http://www.javaruntype.org] was conceived at first as a part of the op4j project, and by the same person who created op4j itself, but later during op4j's development it was decided that javaRuntype should be a project of its own as its range of application by separate was in fact quite broad.
So, javaRuntype remains today as a useful and required dependency for op4j, but it can also be used without op4j at all for several different purposes.
No, it does not.
In many ways:
If you want to contribute some code to op4j, please read first the page on Contributing to op4j.
op4j is mainly useful for developers. We say it is a developer happiness tool because its aim is to enable developers to create cleaner and more readable java code, especially auxiliary code (data conversions, structure managing, etc). In order to achieve this, op4j builds on the Fluent Interface concept and also provides a huge set of predefined functions which enable developers to perform everyday tasks in an elegant and simple manner.
First of all, congratulations on having read all the docs, you are really brave ;-).
The op4j authors maintain a blog with example recipes which can show you some practical examples and give you ideas for using op4j. It is called Bending the Java spoon and it can be reached at http://www.bendingthejavaspoon.com.
Well, obviously if the authors believed that, we wouldn't have been working on op4j for the last couple of years ;-). The answer is no.
We have heard this comment a couple of times, always coming from people who see op4j as a library for creating closures, which it is not. Function expressions are a nice feature in op4j but -besides not being completely comparable to closures (just similar in concept)- creating functions is not the main objective of the library (although it is a nice one).
op4j tries to bring Java a little bit closer to the dynamicity of other languages by enabling coding styles more similar to the fluency of some functional languages, something we believe will not be a Java 7 feature. As will not be the several hundreds of functions for everyday tasks op4j provides out-of-the-box.
And even more: op4j works with Java version 1.5 or higher whereas Java 7's new features will only work with... well, Java 7 ;-)
Absolutely! We understand that chained operation expressions are the trendiest and most modern feature in op4j (in the authors' opinion), but in fact that is just one of the two big features in op4j. The other one is, of course, functions. op4j includes several hundred powerful functions which can be used directly without ever creating any kind of chained expression, and we'd love you to use them that way, if that is what you prefer.
Just have a look at, for example, the amazing functions in FnString. Great time-saving functions, ready to be used!