Java将泛型与可比较的<;进行比较;?超级T>;来自另一个班级

Java将泛型与可比较的<;进行比较;?超级T>;来自另一个班级,java,generics,Java,Generics,我有一个“模式”和“字段”模型,其中一个字段表示一个数据类型,并有关于如何解析它的方法,模式是字段的集合。我试图实现泛型比较,但是,我无法编译代码,也无法找出正确的泛型范围。我怎样才能让它工作 类字段>字段; 字段getField(int索引){…} } 公共阶级比较{ 公共静电 比较。大于(s.getField(0),“val1”,“val2”); //汇编 比较。大于2(s.getField(0),“val1”,“val2”); } } 下面的代码在1.8中编译 import java.ut

我有一个“模式”和“字段”模型,其中一个字段表示一个数据类型,并有关于如何解析它的方法,模式是字段的集合。我试图实现泛型比较,但是,我无法编译代码,也无法找出正确的泛型范围。我怎样才能让它工作

类字段>字段;
字段getField(int索引){…}
}
公共阶级比较{
公共静电
比较。大于(s.getField(0),“val1”,“val2”);
//汇编
比较。大于2(s.getField(0),“val1”,“val2”);
}
}

下面的代码在1.8中编译

import java.util.Map;

class Field<T extends Comparable<? super T>> {

  T parse(String val) {
      return null;
  }
}

class Schema {
  Map<Integer, Field<?>> fields;

  Field<?> getField(int index){ return null; }
}

class Comparison {
  public static <T extends Comparable<? super T>> boolean greaterThan(Field<T> f, String val1, String val2) {
   // compiles as expected
    return f.parse(val1).compareTo(f.parse(val2)) > 0;
  }
}

public class App {

 public static void main(String[] args) {
  Schema s = new Schema();
  //compiles ok
  Comparison.greaterThan(s.getField(0), "val1", "val2");
}
}

import java.util.Map;
类字段>字段;
字段getField(int索引){return null;}
}
阶级比较{

public static
Comparable
Field
可能会把您搞砸。您必须能够将其解析为一个类型,否则它将不起作用。@markspace什么是“正常的事情”你说得对。IntelliJ实际上在UI中将此错误报告为编译错误,并且在IntelliJ中运行时也报告了编译错误。但是,从命令行构建似乎可以正常工作。Hmmm@aarbor我同时使用了命令行和eclipse。也检查了1.7。工作正常。我知道,我同意你的看法。这是一个IntelliJ问题