2016-09-26 8 views
0

文字列形式として比較する必要がある2つの値を渡していますが、実際の型は異なります。タイプキャスト後のオブジェクト値の比較

私は与えられた値を型キャストしてオブジェクトを返す型キャスト関数を呼び出します。

public object typeCast(columnDataType,columnFormat,columnValue){ 

     case "(IntegerType)": 
     return Integer.parseInt(filterValue); 
     case "(LongType)": 
     return Long.parseLong(filterValue);  
    } 

ただし、「より大きい」または「より小さい」操作はできません。オブジェクト型に対して定義されていない

a1>a2 

+0

あなたは 'Object'を返します。何を期待していますか? 'Object'はどのようにして他のものよりも大きくなりますか? – SomeJavaGuy

答えて

0

コンパイラは実際にあなたのケースで何が起こるのか、どのように行くのか(どのように知っていると思いますか?

0

戻す前に、解析された値を1つの共通タイプ(たとえばlongまたはdouble)にキャストし、メソッドの戻り値の型も変更できます。

または、クラスNumberを使用し、比較するときはlongValue()またはdoubleValue()を呼び出します。

1

問題1:<または>演算子を参照型に使用することはできません。考えられる解決策:Comparable<T>.comparteTo(T)メソッドを使用してください。

問題2:ObjectクラスにComparableが実装されていません。考えられる解決策:Comparable<?>を返します。

問題3:Comparable<?>を返すと、ジェネリック型の安全性が失われます。 (Meh ....)

もっと多くの文脈を見ることができれば助けになると思います。そして、我々は推測する必要がないように、(少なくとも)構文的に有効であるにもリアル Javaコード...ちなみに


、何を(Javaパースペクティブから)やっていることはタイプではありません鋳造。実際にはの変換です。参照型の場合、キャストと変換の区別は開始です。型キャスティングは以前と同じオブジェクトを提供します。変換により、別のオブジェクトが得られます。