Вот тот, который поймал меня сегодня: без reification, если вы напишите метод, который принимает список общих элементов varargs ... вызывающие абоненты могут ДУМАТЬ, что они безопасны, но случайно передать любой старый код и взорвать ваш способ.
Кажется маловероятным, что это произойдет? ... Конечно, пока ... вы не используете Class в качестве своего типа данных. На этом этапе ваш вызывающий абонент с радостью отправит вам множество объектов Class, но простая опечатка отправит вам объекты Class, которые не соответствуют T, и ударам.
(NB: Возможно, я допустил здесь ошибку, но, погуглив вокруг "generics varargs", вышеприведенное, кажется, именно то, что вы ожидаете. То, что делает это практической проблемой, это использование Class, я думаю - кажется, что абоненты менее осторожны :()
Например, я использую парадигму, которая использует объекты класса в качестве ключа на картах (это более сложно, чем простая карта - но концептуально это то, что происходит).
например. это прекрасно работает в Java Generics (тривиальный пример):
public <T extends Component> Set<UUID> getEntitiesPossessingComponent( Class<T> componentType)
{
// find the entities that are mapped (somehow) from that class. Very type-safe
}
например. без определения в Java Generics, этот принимает ЛЮБОЙ объект "Класс". И это только крошечное расширение предыдущего кода:
public <T extends Component> Set<UUID> getEntitiesPossessingComponents( Class<T>... componentType )
{
// find the entities that are mapped (somehow) to ALL of those classes
}
Вышеуказанные методы должны быть записаны тысячи раз в отдельном проекте - поэтому вероятность человеческой ошибки становится высокой. Ошибки отладки оказываются "не веселыми". В настоящее время я пытаюсь найти альтернативу, но не очень надеюсь.