我不知道如何对newEntry执行类型检查,我想确保它是MyTable类型(不创建MyTable对象)。
public static boolean add(String table, Object newEntry)
{
boolean result;
if (table.equals("MyTable") && newEntry.getClass() == MyTable.getClass())
{
...
}
}
我的问题是:
newEntry.getClass() == MyTable.getClass().
注意:MyTable是一个类名,而不是一个对象。
答案 0 :(得分:4)
基本上你想要的是:
isAssignableFrom
看看:http://www.ralfebert.de/blog/java/isassignablefrom/
所以,在你的情况下,你想要:
MyTable.class.isAssignableFrom(newEntry.getClass())
答案 1 :(得分:3)
使用instanceof运算符。有关更多文档,请参阅JLS
查看这个着名的答案What is the difference between instanceof and Class.isAssignableFrom(...)?
答案 2 :(得分:2)
instanceof
是你的朋友:
if (table.equals("MyTable") && newEntry instanceof MyTable)
它实际上是isAssignableFrom
方法的简写,但输入更容易:)
答案 3 :(得分:2)
与instanceof
比较。
if (newEntry instanceof MyTable) {
// do something
}
在此示例中,如果newEntry
是MyTable
的实例,或者newEntry
是超级类MyTable
的实例,则条件为真。
将您的陈述更改为此以使其正常工作:
if (table.equals("MyTable") && newEntry instanceof MyTable)
您还可以使用isAssignableFrom()
来比较它们。您可能希望这样做的原因是因为使用instanceof
,您必须在编译程序之前知道要比较的类。使用isAssignableFrom()
,您可以在运行时更改要比较的类。
if (table.equals("MyTable") && MyTable.class.isAssignableFrom(newEntry.getClass()))
答案 4 :(得分:0)
您可以使用MyTable.class
检索班级名称。