私は、特定の値がデータセットの値と等しいかどうかを確認する必要があるプロジェクトを作成しています。オブジェクトを不明なデータ型にキャスト
これは私が作成してい関数である:
columnName
は、私は関数を適用され、
limit
が等価条件のチェックに使用される値であり、私のデータセットの列である
public void setSingleLimit(String columnName, Object limit){
}
を。
基本的に、この関数はlimit
の値をとり、columnName
のすべての値が等しいかどうかをチェックします。
しかし、私は手の前にその列のタイプを知らない。私は、しかし、関数の列のデータ型を取得することができます。
dataset.first().get(columnName).getClass()
、私はlimit
をキャストしたい
(私たちは安全かつ確実に列のすべての値が同じクラス/データ型に属していると仮定することができます)私の列の値のクラスを提供します比較を行うために関数内で受け取ったオブジェクトを列のクラス型に変換します。
私はこの関数をオーバーライドして、異なる値(int、long、Boolean、Stringなど)を受け入れることができます。これは確実に機能します。しかし、複雑さを軽減し、エンドユーザーにわかりやすい方法を作成したいと考えています。また、ユーザーが関数に正しい値を入力することも確実に想定できます。つまり、列がStringの列である場合、ユーザーはStringではない値を入れません。
どのように手で知られていないクラスにオブジェクトをキャストすることができますか?
ありがとうございます。私はそのようにするだろう、キャストを使用せずに
あなたは[this](https://stackoverflow.com/questions/14319760/java-reflection-casting-to-an-unknown-object?rq=1)のようなJavaのリフレクションを使用する必要があると思いますが、私はあなたをさらに助けることができません –
あなたは平等をチェックしたいと言います。なぜあなたは 'equals(Object o)'を使うことができないのですか? 'Object'で宣言され、' Object'をパラメータとして受け取ります。実装は実行時に動的にバインドされます。 –
内部に入る可能性のあるタイプのサブセットを知っていますか?そうであれば、このようなパラメータを持つプライベートメソッドを作成することができ、パブリックメソッドでは 'if(limit instanceof)'または 'if( .getClass()。isAssignableFrom(limit.getClass()))'を使用します。私はそれがとても醜いことを知っていますが、あまりにも多くの種類の制限がないなら、あなたはそれで暮らすことができます。 –
bilak