Lightweight interfaces instead of function types

Stephen Colebourne scolebourne at joda.org
Fri Feb 19 10:15:38 PST 2010


On 19 February 2010 17:47, Neal Gafter <neal at gafter.com> wrote:
> Tmp.java:5: [error] generic array creation
>        Callable<String>[] array = new Callable<String>[10];
> This is a hard error, not a warning.

True. But if I want a Callable<String>[] I write:

      Callable<String>[] array = new Callable[10];

This works, and is safe /in practice/ (rather than type-system safe).


> I have problems with your new reference conversions among interface
> types that are not subtypes of each other.  They have all of the same
> problems as the lambda conversion that Josh and I are complaining
> about, and more.

Wrapping an anonymous inner class implementing interface B around an
object implementing interface A is a known concept in current Java.
Yes there are downsides (the object identity changes, mitigated by the
equals method rule) but overall, the key is to have a known language
change complexity.

On 19 February 2010 17:55, Mark Thornton <mthornton at optrak.co.uk> wrote:
> Stephen Colebourne wrote:
>> Cons:
>> - Requires developers to name everything
> Which still leaves an API like ParallelArray with 81 of them, all with names
> that do little more than repeat the types of their parameters.

Yep. But at least they could be defined in one .java file using just
81 lines of code ;-)

Again, its a trade-off. The benefit for ParallelArray is that
Predicate or Transformer is IMO more meaningful to someone just
casually coming to the API than a random function type.

Stephen


More information about the lambda-dev mailing list