2016-09-26 46 views
0

我传递了需要作为字符串格式进行比较的两个值,但它们的实际类型不同。在类型转换后比较对象值

因此,我调用一个类型转换函数,它将对给定值进行类型转换并返回一个对象。

public object typeCast(columnDataType,columnFormat,columnValue){ 

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

但是,我无法做到“大于”或“小于”操作。

a1>a2 

不是对象类型定义。

+0

你确实返回一个'Object',你期望什么?一个“对象”怎么能比另一个更大? – SomeJavaGuy

回答

0

出现这种情况,因为编译器不知道什么是真正要发生的事,你的情况,它是如何的所有要去(它是如何想知道,即使你不知道,但什么时候?)。

0

在返回之前,可以将解析的值转换为一个常用类型(例如,longdouble),并更改方法的返回类型。

或使用类别Number并在比较时调用longValue()doubleValue()

1

问题1:您不能在引用类型上使用<>运算符。可能的解决方案:使用Comparable<T>.comparteTo(T)方法。

问题2:Object类不执行Comparable。可能的解决方案:返回Comparable<?>

问题3:如果您返回Comparable<?>,您将失去通用型安全性的好处。 (Meh ....)

我认为如果我们可以看到更多的上下文,这将有所帮助。而且还真正 Java代码是(至少)语法有效的,使我们不必猜...


顺便说一句,你在做什么(从Java透视图)是不是类型铸件。它实际上是的转换的值。对于参考类型,转换和转换之间的区别是开始的。类型转换为您提供与之前相同的对象:转换为您提供了一个不同的对象。