Дженерики Java: несколько универсальных параметров?

Если Вы захотите портативное решение, которое будет работать над любым ANSI SQL-92 RDBMS, необходимо будет добавить новый столбец к таблице.

Joe Celko является исходным автором Вложенные Наборы подход к хранению иерархий в SQL. Вы можете, Google "вложил наборы" иерархия для понимания больше о фоне.

Или можно просто переименовать порожденный к leftid и добавить , исправился .

Вот моя попытка суммировать Вложенные Наборы, которые горестно потерпят неудачу, потому что я не Joe Celko: SQL является основанным на наборе языком, и модель смежности (хранящий родительский идентификатор) НЕ является основанным на наборе представлением иерархии. Поэтому нет никакого чистого основанного на наборе метода для запросов схемы смежности.

Однако , большинство основных платформ представило расширения в последние годы для контакта с этой точной проблемой. Таким образом, если кто-то отвечает с Определенным для пост-ГРЭС решением, используйте это любой ценой.

63
задан atp 18 November 2009 в 22:17
поделиться

4 ответа

Да, это возможно (но не с вашей подписью метода), и да, с вашей подписью типы должны быть одинаковыми.

С предоставленной вами подписью T должен быть связан с одним типом (например, String или Integer ) на месте вызова. Однако вы можете объявить сигнатуры методов, которые принимают несколько параметров типа

public <S, T> void func(Set<S> s, Set<T> t)

. Обратите внимание, что в приведенной выше сигнатуре я объявил типы S и T в самой сигнатуре. Следовательно, они отличаются от любых универсальных типов, связанных с классом или интерфейсом, содержащим функцию, и не зависят от них.

public class MyClass<S, T> {
   public        void foo(Set<S> s, Set<T> t); //same type params as on class
   public <U, V> void bar(Set<U> s, Set<V> t); //type params independent of class
}

Возможно, вы захотите взглянуть на некоторые сигнатуры методов классов коллекций в пакете java.util . Обобщения - действительно довольно сложная тема, особенно когда рассматриваются подстановочные знаки (? Extends и ? Super ). Например, часто бывает так, что метод, который может принимать в качестве параметра Set , также должен принимать Set . В этом случае вы увидите такую ​​подпись:

public void baz(Set<? extends T> s);

По SO уже есть много вопросов, на которые вы можете ответить!