我知道是否有可能在检查所用泛型类型的方法中包含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
,因此我正在寻找一种避免代码重复的方法。我可能会想出一种方法来重载该函数,但是我很好奇,因此我可以了解有关泛型的更多信息。 最佳答案
我知道是否有可能在检查所用泛型类型的方法中包含if语句。
一般而言,不,因为类型删除。基本上,在执行时不知道T
的类型。
您可以使用:
if (point instanceof Point3D)
但这与检查
T
本身是否为Point3D
不太一样。不过,这可能是一个更好的主意:public void processPoints(Point point) {
process(point.x);
process(point.y);
if (point instanceof Point3D) {
Point3D point3d = (Point3D) point;
process(point3d.z);
}
}