Вы писали:
Я хочу использовать его (или нечто подобное), чтобы мой метод принимал несколько аргументов, каждый из которых является членом данного другого class.
Я не думаю, что это можно сделать безопасным для типов способом без каких-либо уродливых взломов, таких как включение экземпляра Class вместе с объектом.
Проблема в том, что с VarArgs вы фактически передаете массив.Но вы не можете иметь массив с различными типами объектов, все они должны быть одинаковыми (или подклассами, поэтому, если у вас есть X [] y, тогда каждый элемент должен быть подклассом X)
Если ваша функция действительно может работать с несколькими типами, вы можете создать что-то вроде класса, который хранит экземпляр Class вместе с экземпляром T и передачей в список аргументов var этого контейнера.
Так, например, у вас может быть
class TypedInstance<T>{
Class<T> type;
T instance;
}
, а затем функция, которая выглядит примерно так:
public whatever(TypedInstance<? extends Object>... whatever){
...
doSomethingWith(whatever[0].type, whatever[0].instance);
...
}
Эти виды хаков необходимы из-за стирания типа Java,Универсальный параметр удаляется во время выполнения, поэтому, если вы хотите его использовать, вы должны вернуть его обратно.