通用静态工厂方法问题

时间:2010-10-24 22:21:34

标签: java eclipse generics netbeans

我的课程如下:

public class Tree<T extends Comparable<? super T>> {
  // private data omitted
  private Tree() {} // non parametric private constructor, not exposed
  // static factory method
  public static <T extends Comparable<? super T>> Tree<T> newInstance() { 
    return new Tree<T>(); 
  }
}

现在我从另一个班级尝试这个:

public class TestClass {
  public void test() {
    Tree<Integer> tree = Tree.newInstance(); // fail
  }
}

但是当我使用公共构造函数时,以下代码可以正常工作

public void test() {
  Tree<Integer> tree = new Tree<Integer>(); 
}

我可能做错了什么?

以下是错误消息:

Incompatibile types:
required: structures.trees.Tree<java.lang.Integer>
found: <T>structures.trees.Tree<T>

现在古怪:您可以自己尝试一下。此代码适用于我的Eclipse 3.6 Helios,但它不适用于我的NetBeans 6.9.1。我无法相信这是IDE的问题(我甚至使用相同的JDK)......一个想法? :o

1 个答案:

答案 0 :(得分:2)

BalusC评论 - javac bug。

通过显式输入解决:

Tree<Integer> tree = Tree.<Integer>newInstance();