将对象转换为未知数据类型

时间:2017-07-27 14:39:47

标签: java casting

我正在处理我需要检查特定值是否与数据集上的值相等的项目。

这是我正在创建的功能:

public void setSingleLimit(String columnName, Object limit){

}

其中columnName是我的数据集的列,我将应用函数,limit是在等式条件检查中使用的值。

基本上,此函数将采用limit值并检查columnName中的所有值是否等于该值。

但是,我事先不知道列的类型。但是,我可以获取函数中列的数据类型。

dataset.first().get(columnName).getClass() 给我列中的值类(我们可以安全可靠地假设列中的所有值都属于同一个类/数据类型)

我想将函数中收到的limit对象强制转换为列类类型,以便能够进行比较。

我知道我可以覆盖该函数,因此它可以接受不同的值(int,long,Boolean,String等),这肯定会起作用。但是,我想创建一种方法,以降低复杂性并便于我的最终用户理解。我们还可以安全地假设用户将在函数上输入正确的值,这意味着如果列是字符串列,则用户不会放置不是字符串的值。

我是否知道如何将对象强制转换为之前未知的类?

谢谢。

3 个答案:

答案 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
}

实施例: 如果limitString,则会使用equals()中的StringcolumnValue不是String并不重要,因为在这种情况下它只会返回false

确保不同的equals()实施措施符合您的要求。如果您使用自定义类,则可以自行覆盖它。

答案 1 :(得分:1)

不使用演员表,我会这样做:

if(limit instanceof anyDataset) {
//Compare
}

答案 2 :(得分:1)

在比较和投射对象时,您可以使用instanceof比较来确保类型安全。

例如:

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

这将避免ClassCastException,并确保您使用您期望的确切数据类型完全按照您的意愿行事。

有关instanceof的更多信息: