Project Valhalla will probably be part of Java 10 (expected 2018). Among other things it allows using primitives as generic arguments.
Building Valhalla
On a linux/unix/osx box we start with:
hg clone http://hg.openjdk.java.net/valhalla/valhalla cd valhalla bash get_source.sh #this one takes some time bash configure make clean images # this one takes some cpu |
Box<int>
We can have a class like this:
public class Program { public static void main(String[] args) { // this one still doesn't work, List not updated to List // List l = new ArrayList(); // l.add(5); // System.out.println(l.get(0)); Box b = new Box(6); System.out.println(b.get()); } } class Box { private final T t; public Box(T t) { this.t = t; } public T get() { return t; } } |
javap
Running javap gives
$ javap -c Program.class gives: [openjdk@localhost bin]$ ./javap -c Program.class Compiled from "Program.java" public class Program { public Program(); Code: 0: aload_0 1: invokespecial #1 // Method java/lang/Object."":()V 4: return public static void main(java.lang.String[]); Code: 0: new #2 // class "Box${0=I}" 3: dup 4: bipush 6 6: invokespecial #3 // Method "Box${0=I}"."":(I)V 9: astore_1 10: getstatic #4 // Field java/lang/System.out:Ljava/io/PrintStream; 13: aload_1 14: invokevirtual #5 // Method "Box${0=I}".get:()I 17: invokevirtual #6 // Method java/io/PrintStream.println:(I)V 20: return } |
Running our pretty simple app gives:
[openjdk@localhost bin]$ ./java Program Specializing Box${0=I}; searching for Box.class (not found) Specializing Box${0=I}; searching for Box.class (found) 6 [openjdk@localhost bin]$ |
Notes: List is still not parameterized with because ... issues.
One thought on “[jug.bg] Building Valhalla and using primitives as generic arguments”