Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将parseUnsignedInt移植到java1.7_Java_Java 8_Java 7 - Fatal编程技术网

将parseUnsignedInt移植到java1.7

将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

我使用的是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.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(...)
   }
}