任何人都可以告诉我JDK7/8仍然可以使用jsr14目标选项javac吗?
说,
$ javac -source 1.5 -target jsr14 Hello.java
Run Code Online (Sandbox Code Playgroud) 我记得已经阅读过关于JDK7的一个新功能(现在也受Netbeans编辑器的支持,但仅限于当前的主干版本).
在没有类型变量的情况下instanceof SomeClass<?>编写时,这个微小的特征不再产生警告.
它叫这个功能怎么样?
有人知道任何参考,在哪里描述?
最重要的是:JDK7中是否存在与类型变量相关的其他变化?
我在Java7中遇到Rhino javascript引擎的性能问题,很快 - 我的脚本(解析和编译文本)在Chrome中运行的速度比Java7 Rhino脚本引擎快50到100倍.
我试图找到改善情况的方法,并发现Rhino支持编译脚本.我尝试用我的脚本做这件事,实际上没有看到任何改进.最后 - 我最终得到了一个虚拟的短测试套件,我认为编译版和解释版之间的性能没有任何差别.请让我知道我做错了什么.
注意:有些消息来源提到Rhino引擎运行编译脚本比直接用Java编写的"相同"代码慢大约1.6.不确定此示例中使用的"脚本编译"是否与假设相同.
测试java类如下,我在我的机器上得到的样本结果......
结果
Running via com.sun.script.javascript.RhinoScriptEngine@c50443 ...
time: 886ms, chars: 38890, sum: 2046720
time: 760ms, chars: 38890, sum: 2046720
time: 725ms, chars: 38890, sum: 2046720
time: 765ms, chars: 38890, sum: 2046720
time: 742ms, chars: 38890, sum: 2046720
... 3918ms
Running via com.sun.script.javascript.RhinoCompiledScript@b5c292 @ com.sun.script.javascript.RhinoScriptEngine@f92ab0 ...
time: 813ms, chars: 38890, sum: 2046720
time: 805ms, chars: 38890, sum: 2046720
time: 812ms, chars: 38890, sum: 2046720
time: 834ms, chars: 38890, sum: 2046720
time: 807ms, chars: … 我正在尝试使用IntelliJ(在Mac OS X上)编译我使用Eclipse编写的一些代码.我试图运行以下代码:
switch (category) {
case "below 20":
below20++;
break;
case "20 to 29":
to30++;
break;
case "30 to 39":
to40++;
break;
case "40 to 49":
to50++;
break;
case "50 to 59":
to60++;
break;
case "60 to 69":
to70++;
break;
case "70 t0 79":
to80++;
break;
case "80 to 89":
to90++;
break;
case "90 to 99":
above90++;
break;
default:
break;
}
Run Code Online (Sandbox Code Playgroud)
但是,我收到错误:
java: strings in switch are not supported in -source 1.6
(use -source 7 or higher to enable …Run Code Online (Sandbox Code Playgroud) 最近,我们将Jdk版本升级1.6到1.8我的一个Java项目中.但是有一些编译或运行时错误,所以我必须升级一些库:
1.9to1.103.x到4.x那是因为他们使用的是早期版本的ASM,但仅支持jdk 1.8 5.x
Java表示它是向后兼容的,但为什么原始版本的库无法直接与jdk 1.8一起使用?
我有一个基本上看起来像这样的接口:
public interface ISetting<T> {
public T getDefault();
public T value();
public void set(T value);
public String getName();
public default String getValueName() {
Object obj = value();
if (obj instanceof Boolean) {
return (boolean)obj ? "Yes" : "No";
}
return obj.toString();
}
}
Run Code Online (Sandbox Code Playgroud)
然后在另一个班级我有一个清单 ISetting<?>
private List<ISetting<?>> settings = Arrays.asList(
new ClassMode(),
new EndMode(),
new PlayerLives(),
new JoinMidGame(),
new ScoreboardDisplay(),
new LifePerKill(),
new ExplosiveBullets(),
new ReloadTime());
Run Code Online (Sandbox Code Playgroud)
这一切都完美无缺!但是,我使用我的代码的平台不支持Java 8,所以我必须使用Java 7,这就是问题所在.
如果我将Maven目标设置为1.7,就像在我的pom.xml中一样:
<configuration>
<source>1.8</source>
<target>1.7</target>
</configuration>
Run Code Online (Sandbox Code Playgroud)
然后代码完美编译,没有错误或任何东西.但是,当我尝试运行代码时,它给了我这个错误:
java.lang.ClassFormatError:类net/uniqraft/murder/match/settings/ISetting中的方法getValueName具有非法修饰符:0x1
我尝试谷歌它但找不到我理解或似乎适用于我的情况.
所以,我想,我只是将整个代码库变成Java 7:
<configuration> …Run Code Online (Sandbox Code Playgroud) Java 方法类和Java 7的MethodHandle类都引用与方法关联的对象,但它们很少使用,当函数需要传递给另一个时,最好使用实现包含一个的接口的匿名类方法.
(注意:MethodHandles应该比旧方法更快.)
为什么这些结构不经常用于将函数传递给函数?是因为它们仍然冗长吗?
代码示例:
public final class HigherOrder {
public static final List<?> map(final List<?> list, final MethodHandle mh) throws Throwable {
if (list == null) return null;
List<Object> ret = new ArrayList<>(list.size());
for (Object element : list) {
ret.add(mh.invoke(element));
}
return ret;
}
public static final Object reduce(final List<?> list, final MethodHandle mh) throws Throwable {
if (list == null) return null;
Object tmp = list.get(0);
for (int i = 1; i < list.size(); …Run Code Online (Sandbox Code Playgroud) 这似乎是一个疯狂的错误,但Enum.valueOf(type, name)在Oracle JDK 7 SE上似乎不稳定.
表现形式是,在完全相同的名称字符串(我已经验证了这一点),调用valueOf()有时会抛出IllegalArgumentException消息No enum constant ....
我的团队通过Eclipse调试器运行了这个,我们注意到的是,在enum上的valueOf的以下JDK实现中enumConstantDirectory(),即enum 的values()列表,有时似乎缺少某些值.不是枚举本身定义的所有值的全部.
我可以通过Enum.valueOf(enumclass.class, "XXX")在JVM启动时调用所有可能的枚举值来解决这个问题.当我这样做时,似乎values()总是包含全套.
但是,如果我不做这种类型的初始化,有时Enum.valueOf()会抛出一个IllegalArgumentException.
上下文:我在使用XStream 1.4.4转换转换枚举的POJO对象时遇到了这个问题,但问题似乎并不是XStream本身.
有没有人见过这种错误?如果你有,我很想听听.这令我难以置信.这是Oracle JDK/JVM实现中的错误吗?
public static <T extends Enum<T>> T valueOf(Class<T> enumType,
String name) {
T result = enumType.enumConstantDirectory().get(name);
if (result != null)
return result;
if (name == null)
throw new NullPointerException("Name is null");
throw new IllegalArgumentException(
"No enum constant " + enumType.getCanonicalName() + "." + …Run Code Online (Sandbox Code Playgroud) Java 7 Update 25今天刚刚发布,导致我公司开发的框架的某些功能失败.在过去一年中,大多数Java更新都在发生这种情况.如果甲骨文有某种开发者协议允许公司在发布之前测试新更新,那么公司就有时间准备解决任何问题并告知客户做好准备,这将是一件好事.
如果我事先知道这些问题,我就不会更新到Java 7 Update 25,并且会告知我的客户等到创建补丁以进行更新.(告诉他们不更新比让我们的支持部门解释如何访问Oracle JAVA存档并创建免费的Oracle登录以访问安装程序更容易.)
所以我的问题是:有人知道在正式发布之前收到新Java更新副本的方法吗?