TestFilter.java
Description: Binary data
Is there a way to filter the result of a virtual method? Seems okay for statics, but receiver runs interference on virtual calls.
Running the enclosed I get;
10.0
java.lang.IllegalArgumentException: target and combiner types must match:
(TestFilter,int)double != (TestFilter)int
at sun.dyn.MemberName.newIllegalArgumentException(MemberName.java:513)
at java.dyn.MethodHandles.misMatchedTypes(MethodHandles.java:1706)
at java.dyn.MethodHandles.foldArguments(MethodHandles.java:1646)
at java.dyn.MethodHandles.filterReturnValue(MethodHandles.java:1588)
at TestFilter.main(TestFilter.java:29)
Source:;
import java.dyn.*;
public class TestFilter {
public static int a = 10;
public int b = 10;
public static double filter(int x) {
return (double)x;
}
public static void main(String[] args) {
try {
MethodHandles.Lookup lookup = MethodHandles.lookup();
MethodHandle getter = lookup.findStaticGetter(TestFilter.class,
"a", int.class);
MethodHandle filter = lookup.findStatic(TestFilter.class, "filter",
MethodType.methodType(double.class, int.class));
MethodHandle filteredGetter =
MethodHandles.filterReturnValue(getter, filter);
Object result = filteredGetter.invokeWithArguments();
System.out.println(result);
} catch (Throwable throwable) {
throwable.printStackTrace();
}
try {
MethodHandles.Lookup lookup = MethodHandles.lookup();
MethodHandle getter = lookup.findGetter(TestFilter.class, "b",
int.class);
MethodHandle filter = lookup.findStatic(TestFilter.class, "filter",
MethodType.methodType(double.class, int.class));
MethodHandle filteredGetter =
MethodHandles.filterReturnValue(getter, filter);
TestFilter m = new TestFilter();
Object result = filteredGetter.invokeWithArguments();
System.out.println(result);
} catch (Throwable throwable) {
throwable.printStackTrace();
}
}
}
_______________________________________________ mlvm-dev mailing list [email protected] http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev
