Общая статическая проблема фабричного метода - PullRequest
1 голос
/ 25 октября 2010

У меня есть класс, подобный следующему:

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 Ответ

2 голосов
/ 25 октября 2010

Комментарий BalusC - ошибка javac.

Решено явным вводом:

Tree<Integer> tree = Tree.<Integer>newInstance();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...