0

使用されているジェネリックの型をチェックする 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依存しxyいるため、コードの重複を避ける方法を探しています。おそらく代わりに関数をオーバーロードする方法を見つけ出すでしょうが、私は好奇心が強いので、ジェネリックについてもっと学ぶことができます.

4

3 に答える 3

5

普通の古いオーバーロードとジェネリックを避けるのはどうですか?

public void processPoints(final Point2D point)
{
    process(point.x);
    process(point.y);
}

public void processPoints(final Point3D point)
{
    process(point.x);
    process(point.y);
    process(point.z);
}

のインスタンスしかない場合Point2DPoint3Dなぜジェネリック パラメータを使用するのTですか?

などを使用する代わりに、コードの重複を削除する他の方法を探す必要がありますinstanceof

于 2013-10-08T16:06:36.733 に答える