2017-07-27 80 views
1

我正在处理我的项目,我需要检查某个特定值是否等于数据集上的值。将对象投射到未知数据类型

这是我创建的功能:

public void setSingleLimit(String columnName, Object limit){ 

} 

其中columnName是我的数据集的我会申请的功能和limit列是在平等条件检查使用的值。

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

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

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

我想投的limit在函数中接收到的对象为列类类型,以便能够进行比较。

我知道我可以重写函数,以便它可以接受不同的值(int,long,Boolean,String等),这当然会起作用。但是,我想创建一个简单的方法,以减少复杂性并使我的最终用户更容易理解。我们还可以安全地假设用户将在函数中输入正确的值,这意味着如果列是字符串的列,则用户不会放置不是字符串的值。

任何关于如何将对象投射到事先未知的类的想法?

谢谢。

+0

我想你将不得不使用java反射,像[this](https://stackoverflow.com/questions/14319760/java-reflection-casting-to-an-unknown-object?rq=1),但我我不能够进一步帮助你 –

+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 
} 

示例: 如果limitStringequals()String将被使用。 columnValue不是String并不重要,因为在这种情况下它只会返回false

只要确保不同的equals()实现你想要的。如果你使用自定义类,你可以自己覆盖它。

1

不使用投,我会做这样的:

if(limit instanceof anyDataset) { 
//Compare 
}