Many Java develoeprs know that one can declare a generic method. Example:
import java.util.ArrayList;
public class GenMet {
public static <T> void m(ArrayList<T> lst, T o) { }
public static void main(String[] args) {
m(new ArrayList<Integer>(), Integer.valueOf(123));
m(new ArrayList<String>(), new String("ABC"));
//m(new ArrayList<String>(), Integer.valueOf(123));
//m(new ArrayList<Integer>(), new String("ABC"));
GenMet.<Integer>m(new ArrayList<Integer>(), Integer.valueOf(123));
//GenMet.<Integer>m(new ArrayList<String>(), new String("ABC"));
//GenMet.<Integer>m(new ArrayList<String>(), Integer.valueOf(123));
//GenMet.<Integer>m(new ArrayList<Integer>(), new String("ABC"));
//GenMet.<String>m(new ArrayList<Integer>(), Integer.valueOf(123));
GenMet.<String>m(new ArrayList<String>(), new String("ABC"));
//GenMet.<String>m(new ArrayList<String>(), Integer.valueOf(123));
//GenMet.<String>m(new ArrayList<Integer>(), new String("ABC"));
}
}
It can be useful in some cases even though in practice everybody use the version with inferred type and not the version with explicit type.
The same is actually possible with constructors.
import java.util.ArrayList;
public class GenCtor {
public <T> GenCtor(ArrayList<T> lst, T o) { }
public static void main(String[] args) {
new GenCtor(new ArrayList<Integer>(), Integer.valueOf(123));
new GenCtor(new ArrayList<String>(), new String("ABC"));
//new GenCtor(new ArrayList<String>(), Integer.valueOf(123));
//new GenCtor(new ArrayList<Integer>(), new String("ABC"));
new<Integer> GenCtor(new ArrayList<Integer>(), Integer.valueOf(123));
//new<Integer> GenCtor(new ArrayList<String>(), new String("ABC"));
//new<Integer> GenCtor(new ArrayList<String>(), Integer.valueOf(123));
//new<Integer> GenCtor(new ArrayList<Integer>(), new String("ABC"));
//new<String> GenCtor(new ArrayList<Integer>(), Integer.valueOf(123));
new<String> GenCtor(new ArrayList<String>(), new String("ABC"));
//new<String> GenCtor(new ArrayList<String>(), Integer.valueOf(123));
//new<String> GenCtor(new ArrayList<Integer>(), new String("ABC"));
}
}
But honestly I can not imagine any oneever wanting to do that!