Question on layer/peeling

Michael Barker mikeb01 at gmail.com
Tue Jan 6 08:39:20 UTC 2015


>
> This trick is a good one, and it can go a bit farther with primitives, if
> you think about the other supertypes of Integer, Double, etc., especially
> Comparable.  (I'd kind of like to define an interface Objectable to carry
> toS/eq/hC.)
>

Could allowing primitives to implement interfaces like Comparable make the
following implementations be possible, such that the JIT could generate
specialisations for the primitive types?

public class Arrays
{
    public <any T extends Comparable> void sort(T[] array)
    {
        // ... implement sort
    }

    public <any T extends Number> double average(T[] array)
    {
        if (array.length == 0) { return Double.NaN; }

        double total = 0;
        int count = 0;
        for (T number : array)
        {
            total += number.doubleValue();
        }

        return total / count;
    }
}

int[] vals = { ... };
Arrays.<int>sort(vals);
double avg = Arrays.<int>average(vals);

If so, I'm sure that there could be some interesting applications.

Mike.


More information about the valhalla-dev mailing list