Java 可能的eclipse错误

Java 可能的eclipse错误,java,generics,compiler-errors,eclipse-oxygen,Java,Generics,Compiler Errors,Eclipse Oxygen,我正试图解决一个泛型问题。但eclipse似乎在抱怨,而没有一个合理的抱怨 考虑以下方法 public static <FR extends FilterResult, T> List<? super WrappedFilterResult<? super T, FR>> filter(String check, Collection<T> elements, Function<? super T, String> converter,

我正试图解决一个泛型问题。但eclipse似乎在抱怨,而没有一个合理的抱怨

考虑以下方法

public static <FR extends FilterResult, T> List<? super WrappedFilterResult<? super T, FR>> filter(String check, Collection<T> elements, Function<? super T, String> converter, Filter<? extends FR> filter, ACComparator<? super WrappedFilterResult<? super T, ? super FR>> comparator)
{
    // eclipse says 'filter' doesn't accept these arguments
    return filter(check, elements, new ArrayList<>(), converter, filter, comparator);
    
    // doing a self call will result in the same error?
    // return filter(check, elements, converter, filter, comparator);
    
    // calling without returning doesn't solve it either?
    // filter(check, elements, converter, filter, comparator);
    // return null;
}

// no complaints here
public static <FR extends FilterResult, T, C extends Collection<? super WrappedFilterResult<? super T, FR>>> C filter(String check, Collection<T> elements, C result, Function<? super T, String> converter, Filter<? extends FR> filter, ACComparator<? super WrappedFilterResult<? super T, ? super FR>> comparator)
{
    // content
}

提交给Bugzilla

  • 螺纹连杆1位于
  • 螺纹连杆2位于

    • 似乎这就是问题所在。At list Idea不会显示该代码上的任何错误

      问题在于该行中的
      新ArrayList()

      返回过滤器(检查、元素、新ArrayList()、转换器、过滤器、比较器)

      如果我们将其替换为
      result
      变量,定义为


      List我假设这是一个EclipseJDT编译器错误,尽管我没有咨询JLS,也不想深入研究它

      我的假设有三个原因:

    • 你的代码

    • 我希望用自己的参数调用自己的方法应该编译

    • 早些时候,我还遇到了一个案例

    • MCVE复制您的问题:
      公共静态类FilterResult{}
      公共静态类WrappedFilterResult扩展了FilterResult{}
      公共接口伴随器{}
      公共静电
      
      空隙过滤器1(ACComparator请定义类型
      FilterResult
      WrappedFilterResult
      ACComparator
      ,只是基本类声明,我们不需要它们的实现。您是否也可以声明和初始化用于调用筛选方法的所有变量?@xtratic将它们添加到post@ZachPedigo我刚试过它不会改变任何令人窒息的事情enough@xtratic似乎应该是
      new ArrayListAlright,这证实了这一怀疑。那么我们如何使用Eclipse JDT编译器的语言/解决方法呢?如果这是可能的话?Eclipse似乎对
      ACComparator
      有问题,所以我正在研究如何使用它帽子。非常感谢您快速深入的研究!这是eclipse bug报告的材料吗?如果是这样,而且没有人对此做任何事情,我将在接下来的一周(在整理完当前资料后)发布一份关于他们的bug跟踪器的报告。否则,请随时发送错误报告,这在我看来是一个非常重要的问题。您可能还包括我在这里链接的另一个问题,因为它有点相关。提交时感谢您的思考,但遗憾的是您的方法没有解决问题
      public static class FilterResult {}
      public interface Filter<FR extends FilterResult> {}
      public static class WrappedFilterResult<T, FR extends FilterResult> extends FilterResult {}
      public interface ACComparator<FR extends FilterResult> {}
      
      public static class FilterResult {}
      public static class WrappedFilterResult<T, FR extends FilterResult> extends FilterResult {}
      public interface ACComparator<FR extends FilterResult> {}
      
      public static <FR extends FilterResult, T>
        void filter1(ACComparator<? super WrappedFilterResult<? super T, ? super FR>> comparator) {
          // both compile fine with normal Java compiler
          // but error with Eclipse JDT compiler (I'm using Eclipse 4.9.0)
          filter1(comparator);
          filter2(comparator);
      }
      
      public static <FR extends FilterResult, T>
        void filter2(ACComparator<? super WrappedFilterResult<? super T, ? super FR>> comparator) {
      }
      
      public static
      < FR extends FilterResult, T,
        A extends ACComparator<? super WrappedFilterResult<? super T, ? super FR>> // <-- here
      >
      void filterSuccess(A comparator) {
          // success!
          filter1(comparator);
          filter2(comparator);
      }