将parseUnsignedInt移植到java1.7
我使用的是java1.8,它具有将parseUnsignedInt移植到java1.7,java,java-8,java-7,Java,Java 8,Java 7,我使用的是java1.8,它具有parseUnsignedInt()。有人告诉我,我们必须使用java1.7,因为它在系统上。我想我可以移植java.lang.integer.java、java.lang.Long.java和java.lang.annotation.Native.java函数,然后用我的代码编译。这允许代码编译时没有错误。运行时,出现以下错误: 线程“thread-6”java.lang.NoSuchMethodError中出现异常:java.lang.Integer.pars
parseUnsignedInt()
。有人告诉我,我们必须使用java1.7
,因为它在系统上。我想我可以移植java.lang.integer.java
、java.lang.Long.java
和java.lang.annotation.Native.java
函数,然后用我的代码编译。这允许代码编译时没有错误。运行时,出现以下错误:
线程“thread-6”java.lang.NoSuchMethodError中出现异常:java.lang.Integer.parseUnsignedInt(Ljava/lang/String;)I
eclipse调试器似乎也找不到该函数。我必须做些什么才能让它工作?方法ParseUnsignedIt是在Java 1.8中引入的,正如它在其javadoc中所记录的那样(请注意自1.8以来的>): 但是JDK也包含源代码,因此您可以在自己的类中编写自己的parseUnsignedInt方法,类似于Java8中包含的实现,如果Java8许可证允许的话 看 第661行及其后 有关安全性的详细信息(即为什么不能在java.lang包中放置自己的Integer类)、否决此安全性的选项以及不应该(或者更好——为什么不允许)的原因,请参阅中的选择答案 因此,您必须在自己的包中实现自己的类:
package com.yourname;
/*
* Contains code from OpenJDK Java8, Copyright (c) 1994, 2013, Oracle and/or its affiliates.
* TODO add more info from Oracle class comment here.
*/
public class IntCompatUtilities {
public static int parseUnsignedInt(String s) throws NumberFormatException {
return parseUnsignedInt(s,10);
}
public static int parseUnsignedInt(String s, int radix)
throws NumberFormatException {
//TODO content from OpenJDK 8's Integer.parseUnsignedInt(String,int) here.
//instead of return parseInt(s, radix); change to return Integer.parseInt(s, radix);
//instead of throw NumberFormatException.forInputString(s); throw new NumberFormatException(...)
}
}
然后,让所有调用者调用
com.yourname.IntCompatUtilities.parseUnsignedInt(…)
我怀疑您是否将其安装在了正确的包中的正确jar文件中。它正在挑选你的JDK版本。这可能是一个进口问题。如果您不能让它工作,那么只编写您自己的实用程序方法来完成该需求会更容易。解析integers
和Long
并没有那么困难。您正在试图覆盖核心java.lang
库?是的,我正在通过编译项目的src目录java/lang中的Integer.java、Long.java和annotation/Native.java版本来覆盖java.lang库。如上所述,我从1.8中获取了这些文件的代码,并基本上将它们放入了我的项目中(如答案1所示),因此编译是正确的,但在运行时它无法找到它们,因此出现了上述错误。由于1.7没有parseUnsignedInt()函数,我只需要弄清楚如何使用java\lang中的类文件,而不是JRE库中的类文件。由于JDK保护机制,您无法在java.lang包中添加自己的整数类。您必须在自己的类中编写它,例如作为静态方法,并更改所有调用。啊,是的,我明白了。我试图重命名它,以避免对Integer包造成干扰,但我得到了那个错误。好啊我将把它放在我的基本函数中,以便以尽可能少的方式更改代码,并在一年左右的时间内使用java1.8时使其成熟…谢谢。谢谢您的参考。这就是我所做的,它没有完全起作用。它允许编译,但不可运行。重新措辞我的答案(添加了详细的指令做什么)。
package com.yourname;
/*
* Contains code from OpenJDK Java8, Copyright (c) 1994, 2013, Oracle and/or its affiliates.
* TODO add more info from Oracle class comment here.
*/
public class IntCompatUtilities {
public static int parseUnsignedInt(String s) throws NumberFormatException {
return parseUnsignedInt(s,10);
}
public static int parseUnsignedInt(String s, int radix)
throws NumberFormatException {
//TODO content from OpenJDK 8's Integer.parseUnsignedInt(String,int) here.
//instead of return parseInt(s, radix); change to return Integer.parseInt(s, radix);
//instead of throw NumberFormatException.forInputString(s); throw new NumberFormatException(...)
}
}