Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.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
如何使用Java开发工具(JDT)检查类型范围?_Java_String Parsing_Primitive Types_Eclipse Jdt - Fatal编程技术网

如何使用Java开发工具(JDT)检查类型范围?

如何使用Java开发工具(JDT)检查类型范围?,java,string-parsing,primitive-types,eclipse-jdt,Java,String Parsing,Primitive Types,Eclipse Jdt,我想使用JDT解析一个包含数字的字符串,以确定包含的数字是否在其中一个基元类型的有效范围内 假设我得到了一个像字符串“1.7976931348623157e350”这样的浮点值,我想看看它是否仍然在原语类型“double”允许的范围内。(在这种情况下,它将不在有效范围内,因为double的最大指数为308)。 我不想使用标准的方法,比如:Double.parseDouble(“1.7976931348623157e350”),因为我担心如果我有大量的原语类型(我想检查),它可能会太慢 如果您了解

我想使用JDT解析一个包含数字的字符串,以确定包含的数字是否在其中一个基元类型的有效范围内

假设我得到了一个像字符串“1.7976931348623157e350”这样的浮点值,我想看看它是否仍然在原语类型“double”允许的范围内。(在这种情况下,它将不在有效范围内,因为double的最大指数为308)。 我不想使用标准的方法,比如:
Double.parseDouble(“1.7976931348623157e350”)
,因为我担心如果我有大量的原语类型(我想检查),它可能会太慢

如果您了解Eclipse开发环境,您就会知道,在普通java文件中,Eclipse能够通过在“超出范围”的情况下在变量下方加上红色下划线来判断变量是否超出范围。所以基本上我想使用这个功能。但是你可以猜到,说起来容易做起来难

我已经从这个库开始试验ASTParserorg.eclipse.jdt.core.dom

但我必须承认我在这里不是很成功。 首先,我尝试使用以下方法调用一些vistor方法:
resolveBinding()
,但它们总是只返回我“Null”

我发现了一些有趣的类,名为
astsyntaxerrorpopagator
,但我不确定如何正确使用它。它似乎传播解析问题或类似的问题,并获取由某个名为
CodeSnippetParsingUtil
的东西类传递的信息。无论如何,这些只是猜测

有人知道如何正确使用这个语法分析器吗

我真的很感谢你的建议。 以下是我尝试调试的一些基本代码:

public class DatatypesParser {

  public static void main(String[] args) {

    ASTParser parser = ASTParser.newParser(AST.JLS4);

    Map options = JavaCore.getOptions();

    JavaCore.setComplianceOptions(JavaCore.VERSION_1_7, options);

    String statement = new String("int i = " + Long.MAX_VALUE + ";");

    parser.setSource(statement.toCharArray());
    parser.setKind(ASTParser.K_STATEMENTS);
    parser.setResolveBindings(true);
    parser.setBindingsRecovery(true);

    ASTNode ast = parser.createAST(null);

    ast.accept(new ASTVisitor() {
      @Override
      public boolean visit(VariableDeclarationStatement node) {
        CodeSnippetParsingUtil util = new CodeSnippetParsingUtil();

        return true;
      }
    });
}
我不想使用以下标准方法: Double.parseDouble(“1.7976931348623157e350”),因为我担心 如果我有大量的基元类型,那么速度可能会太慢 我想查查

实际上,JDT正在使用标准的
Double
方法来解析值,还有更多的方法——因此,如果性能是一个问题,您应该始终使用标准方法

下面是JDT如何解析double

发件人:

public void computeConstant() {
    Double computedValue;
    [...]
    try {
        computedValue = Double.valueOf(String.valueOf(this.source));
    } catch (NumberFormatException e) {
        [...]
        return;
    }
    final double doubleValue = computedValue.doubleValue();
    if (doubleValue > Double.MAX_VALUE) {
        // error: the number is too large to represent
        return;
    }
    [...]
}