Java7无法使用java.dyn包 我安装了java7,其他都OK,就是无法使用java.dyn这个包有没有大侠用过啊,告诉下我查了相关的资料,说是java7的特性,但是我的为啥不能用呢?希望知道的告诉我,没接触过的路过吧,谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 是不是用的JDK不是最新的,是什么情况啊 你有導入這個包嗎?eclipse要3.6以後的版本(反正就是最新版)才支持jdk7, java.dyn 是草案时的包名。MethodHandle 现在在 java.lang.invoke包 果然! 正如你所说,实际上我是想知道下invokedynamic的真面目,我参看了文档,并依其所述写了一个小测试程序,但反编译后并没有发现invokedynamic的调用,类似如上的实现做了几天都无功而返,以下我贴出我的程序,望请指点,赐教程序清单包括两个类:1.IntegerOps.javapublic class IntegerOps { public static Integer adder(Integer x, Integer y) { return x + y; }}2.Test.javaimport java.lang.*;import java.util.*;import javax.script.*;import java.lang.invoke.*;public class Test { public static CallSite mybsm(MethodHandles.Lookup callerClass, String dynMethodName, MethodType dynMethodType) throws Throwable { MethodHandle mh = callerClass.findStatic( Test.class, "IntegerOps.adder", MethodType.methodType(Integer.class, Integer.class, Integer.class)); if (!dynMethodType.equals(mh.type())) { mh = mh.asType(dynMethodType); } return new ConstantCallSite(mh); } private static void js(ScriptEngine jsEngine) throws ScriptException { Double dVar = (Double)jsEngine.eval( "a = 1 + 2;" ); System.out.println(dVar); } public static void main(String[] args) throws ScriptException, NoSuchMethodException { ScriptEngineManager sem = new ScriptEngineManager(); ScriptEngine se = sem.getEngineByName("JavaScript"); if(se == null) { System.err.println("No script engine found for JavaScript"); System.exit(1); } js(se); }}我调试的结果是在运行时,Bootstrap方法mybsm并没有被调用,另外我也曾将IntegerOps.adder的参数和返回值改成了Double...,但仍然是无功而返,请帮忙看看啊! jdk自带的js实现没有使用invokedynamic。Oracle正在实现一个使用invokedynamic的js。你可以看这个 A compiler that takes a Dart file and generate a jar file that can run on any Java 7 compatible VM. 不错,我看了我用mozilla的rhino引擎重写了刚才的程序,反编译的结果如前浏览了一些资料,得出如下的结论,依照JSR 292在JAVA SE7确实添加了invokedynamic,但是ORACLE编译器还不支持,但是JVM支持.推出这个指令目前就只能供一些JAVA工具的开发者使用,比如开发兼容的JAVA7编译器,不知道我的理解对不? asm 库已经支持 invokedyn了。 ASM应该就是个BCI的东东,还算不上编译器吧!或者说它只是提供了一个instrument的接口,可以注入byte code的,里边有注入invokedynamic的机制 一些jvm上的语言使用asm生成字节码。 递归的问题! 大侠 壮士 老鸟 请留步 如何去掉字符串后面所有的逗号 java之中的变态问题...... 怎样实现如下界面 求高手保存的在ULTRAEDIT中设置自己的IDE的.txt文档 郁闷,因为一个MM的问题,来者有分。 求助:使用jbuilder9调试器时的问题(请高手赐教) A Question of A Java Newcomer! helloworld编译成功,但是运行的时候出错。 求扫盲,求老鸟指点迷津!正所谓标题要长长长长长长长长长长长 用mina2做网络编程,在服务端如何主动发送消息
程序清单包括两个类:
1.IntegerOps.java
public class IntegerOps {
public static Integer adder(Integer x, Integer y) {
return x + y;
}
}2.Test.java
import java.lang.*;
import java.util.*;
import javax.script.*;
import java.lang.invoke.*;public class Test {
public static CallSite mybsm(MethodHandles.Lookup callerClass, String dynMethodName, MethodType dynMethodType) throws Throwable {
MethodHandle mh = callerClass.findStatic(
Test.class,
"IntegerOps.adder",
MethodType.methodType(Integer.class, Integer.class, Integer.class));
if (!dynMethodType.equals(mh.type())) {
mh = mh.asType(dynMethodType);
}
return new ConstantCallSite(mh);
}
private static void js(ScriptEngine jsEngine) throws ScriptException {
Double dVar = (Double)jsEngine.eval(
"a = 1 + 2;"
);
System.out.println(dVar);
}
public static void main(String[] args) throws ScriptException, NoSuchMethodException {
ScriptEngineManager sem = new ScriptEngineManager();
ScriptEngine se = sem.getEngineByName("JavaScript");
if(se == null) {
System.err.println("No script engine found for JavaScript");
System.exit(1);
}
js(se);
}
}
我调试的结果是在运行时,Bootstrap方法mybsm并没有被调用,另外我也曾将IntegerOps.adder的参数和返回值改成了Double...,但仍然是无功而返,请帮忙看看啊!
我用mozilla的rhino引擎重写了刚才的程序,反编译的结果如前
浏览了一些资料,得出如下的结论,依照JSR 292在JAVA SE7确实添加了invokedynamic,但是ORACLE编译器还不支持,但是JVM支持.
推出这个指令目前就只能供一些JAVA工具的开发者使用,比如开发兼容的JAVA7编译器,不知道我的理解对不?