代码之家  ›  专栏  ›  技术社区  ›  Xorty

一般静态工厂方法问题

  •  1
  • Xorty  · 技术社区  · 14 年前

    我有如下课程:

    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>
    

    现在 怪诞 :你可以自己试试这个。这段代码确实适用于我的Eclipse3.6 Helios,但不适用于我的NetBeans 6.9.1。我不敢相信这是IDE的问题(我甚至对两者都使用相同的JDK)。一个想法?o

    1 回复  |  直到 14 年前
        1
  •  2
  •   Xorty    14 年前

    Balusc注释-javac错误。

    通过显式键入解决:

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