2017-07-27 7 views
1

私は、特定の値がデータセットの値と等しいかどうかを確認する必要があるプロジェクトを作成しています。オブジェクトを不明なデータ型にキャスト

これは私が作成してい関数である:

columnNameは、私は関数を適用され、 limitが等価条件のチェックに使用される値であり、私のデータセットの列である
public void setSingleLimit(String columnName, Object limit){ 

} 

を。

基本的に、この関数はlimitの値をとり、columnNameのすべての値が等しいかどうかをチェックします。

しかし、私は手の前にその列のタイプを知らない。私は、しかし、関数の列のデータ型を取得することができます。

dataset.first().get(columnName).getClass() 、私はlimitをキャストしたい

(私たちは安全かつ確実に列のすべての値が同じクラス/データ型に属していると仮定することができます)私の列の値のクラスを提供します比較を行うために関数内で受け取ったオブジェクトを列のクラス型に変換します。

私はこの関数をオーバーライドして、異なる値(int、long、Boolean、Stringなど)を受け入れることができます。これは確実に機能します。しかし、複雑さを軽減し、エンドユーザーにわかりやすい方法を作成したいと考えています。また、ユーザーが関数に正しい値を入力することも確実に想定できます。つまり、列がStringの列である場合、ユーザーはStringではない値を入れません。

どのように手で知られていないクラスにオブジェクトをキャストすることができますか?

ありがとうございます。私はそのようにするだろう、キャストを使用せずに

+0

あなたは[this](https://stackoverflow.com/questions/14319760/java-reflection-casting-to-an-unknown-object?rq=1)のようなJavaのリフレクションを使用する必要があると思いますが、私はあなたをさらに助けることができません –

+4

あなたは平等をチェックしたいと言います。なぜあなたは 'equals(Object o)'を使うことができないのですか? 'Object'で宣言され、' Object'をパラメータとして受け取ります。実装は実行時に動的にバインドされます。 –

+0

内部に入る可能性のあるタイプのサブセットを知っていますか?そうであれば、このようなパラメータを持つプライベートメソッドを作成することができ、パブリックメソッドでは 'if(limit instanceof )'または 'if( .getClass()。isAssignableFrom(limit.getClass()))'を使用します。私はそれがとても醜いことを知っていますが、あまりにも多くの種類の制限がないなら、あなたはそれで暮らすことができます。 – bilak

答えて

2

あなたは等価性をチェックしたいと言います。ちょうどequals(Object o)を使用してください。これはObjectで宣言され、パラメータとしてObjectを受け入れます。実装は実行時に動的にバインドされます。

public void setSingleLimit(String columnName, Object limit){ 
    Object columnValue = getValue(columnName); 
    limit.equals(columnValue); // If limit can be null, swap variables 
} 

例: limitString場合、Stringからequals()が使用されます。その場合にはfalseを返すだけなので、がStringでない場合は問題ありません。

異なるequals()のインプリメンテーションが必要な機能を果たしていることを確認してください。カスタムクラスを使用する場合は、自分で上書きすることができます。

1

、:

if(limit instanceof anyDataset) { 
//Compare 
} 
1

あなたのオブジェクトを比較すると、鋳造時に型の安全性を確保するためにinstanceof比較を使用することができます。例えば

if (limit instanceof Boolean) { // do something }

これはClassCastExceptionを回避し、あなたが期待している正確なデータ型にしたい正確に何をやっているのを保証します。 instanceof

より:

関連する問題