我正在处理我需要检查特定值是否与数据集上的值相等的项目。
这是我正在创建的功能:
public void setSingleLimit(String columnName, Object limit){
}
其中columnName
是我的数据集的列,我将应用函数,limit
是在等式条件检查中使用的值。
基本上,此函数将采用limit
值并检查columnName
中的所有值是否等于该值。
但是,我事先不知道列的类型。但是,我可以获取函数中列的数据类型。
dataset.first().get(columnName).getClass()
给我列中的值类(我们可以安全可靠地假设列中的所有值都属于同一个类/数据类型)
我想将函数中收到的limit
对象强制转换为列类类型,以便能够进行比较。
我知道我可以覆盖该函数,因此它可以接受不同的值(int,long,Boolean,String等),这肯定会起作用。但是,我想创建一种方法,以降低复杂性并便于我的最终用户理解。我们还可以安全地假设用户将在函数上输入正确的值,这意味着如果列是字符串列,则用户不会放置不是字符串的值。
我是否知道如何将对象强制转换为之前未知的类?
谢谢。
答案 0 :(得分: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
}
实施例:
如果limit
是String
,则会使用equals()
中的String
。 columnValue
不是String
并不重要,因为在这种情况下它只会返回false
。
确保不同的equals()
实施措施符合您的要求。如果您使用自定义类,则可以自行覆盖它。
答案 1 :(得分:1)
不使用演员表,我会这样做:
if(limit instanceof anyDataset) {
//Compare
}
答案 2 :(得分:1)
在比较和投射对象时,您可以使用instanceof
比较来确保类型安全。
例如:
if (limit instanceof Boolean) {
// do something
}
这将避免ClassCastException
,并确保您使用您期望的确切数据类型完全按照您的意愿行事。
有关instanceof
的更多信息: