Я должен знать, возможно ли иметь оператор if в методе, который будет проверять тип используемого общего типа. В случае, когда я подумал об этом, я хочу обработать довольно простой класс Point2D
и класс Point3D
по-разному. В случае 3D точки мне нужно получить доступ к Point3d.z
, и я не уверен, действительно ли это приведет к ПРОБЛЕМАМ версии псевдо-кода, что я хотел бы сделать, этоПроверка типов в общем методе
public <T> void processPoints(T point) {
process(point.x);
process(point.y);
if (T == Point3D) { // What do I do here?
process(point.z); // Will accessing z cause problems?
}
}
В действительности код process
представляет намного сложнее, и z
зависит от x
и y
, поэтому я ищу способ избежать дублирования кода. Вероятно, я смогу найти способ перегрузить функцию, но мне любопытно, поэтому я могу узнать больше о дженериках.
(Это канонический пример не как отношения «есть-а». 3D-точка не является точкой 2D-точки.) –