Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

generic functor class in java

I'd like to have functor class like this:

public class Functor<T, R> { 
    public R invoke(T a) { ... }
}

And another class for the 2 arguments:

public class Functor<T1, T2, R> { 
    public R invoke(T1 a, T2 b) { ... }
}

And so on.

In C# i can write:

class Functor<T> { ... }
class Functor<T1, T2> { ... }

But in Java it would be an error:

The type Functor is already defined

What are best practices for multi-arguments generic classes in java?

like image 553
user1312837 Avatar asked May 22 '12 04:05

user1312837


1 Answers

Because generics are implemented in Java by erasing the type information (in class C<T>, T goes away in the compiled .class file) there is no way for the compiler to know what class you are talking about at runtime.

If you define F<T1> and F<T1,T2> and load them both, some class C, could not identify the one it wanted to use.

This is the long way around saying, I don't think you can do that in Java. :\

What you might want to do is simply have a single argument functor F<T> and let T be the object, a Pair<T1, T2> object, a ThreeTuple<T1, T2, T3> etc. Scala does this.

like image 141
Sam Avatar answered Oct 16 '22 21:10

Sam