alternatives or complements to layers
Peter Levart
peter.levart at gmail.com
Wed Jan 7 13:43:27 UTC 2015
Hi,
While experimenting a bit with the current preliminary prototype, I
found myself on several occasions wanting to call a method from "normal"
API. Say System.out.println(x) with an x of type "any T". Usually a
method that already has various overloads or a method taking an Object.
Javac refuses:
method PrintStream.println(boolean) is not applicable
(argument mismatch; T cannot be converted to boolean)
method PrintStream.println(char) is not applicable
(argument mismatch; T cannot be converted to char)
method PrintStream.println(int) is not applicable
(argument mismatch; T cannot be converted to int)
method PrintStream.println(long) is not applicable
(argument mismatch; T cannot be converted to long)
method PrintStream.println(float) is not applicable
(argument mismatch; T cannot be converted to float)
method PrintStream.println(double) is not applicable
(argument mismatch; T cannot be converted to double)
method PrintStream.println(char[]) is not applicable
(argument mismatch; T cannot be converted to char[])
method PrintStream.println(String) is not applicable
(argument mismatch; T cannot be converted to String)
method PrintStream.println(Object) is not applicable
(argument mismatch; T cannot be converted to Object)
where T is a type-variable:
T extends <any> declared in method <T>test()
But we know that whatever instantiation of T we choose, at least one of
available overloaded methods would apply. If the set of overloaded
methods contains one with parameter of type Object, then any
instantiation of parameter of type "any T" would apply to at least one
of those methods. At specialization time, the most appropriate method
could be "selected".
Of course this would not automatically route reference typed parameter
to the most appropriate method among those taking various reference
types - the one taking Object would always be chosen, but any value
typed paremeter could select the most appropriate method (with implicit
conversions and/or boxing).
This could be viewed as a more natural complement to "layers" for
supporting implementation by parts.
The specializer would either have to inspect the target class somehow,
or javac could provide the set of applicable methods in an attribute
associated with invocation. Or perhaps, such invocation could be
"specialized" as invokedynamic where the linking to the most appropriate
method (with implicit conversions and/or boxing) would be choosen at 1st
invocation.
What do you think?
Regards, Peter
More information about the valhalla-dev
mailing list