3

我不知道如何对 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 是一个类名,而不是一个对象。

4

5 回答 5

5

基本上你想要的是:

isAssignableFrom

看看:http ://www.ralfebert.de/blog/java/isassignablefrom/

所以,在你的情况下,你想要:

MyTable.class.isAssignableFrom(newEntry.getClass())

于 2013-04-14T19:38:21.520 回答
3

使用instanceof运算符 .. 更多文档请参阅 JLS

检查这个著名的答案instanceof 和 Class.isAssignableFrom(...) 有什么区别?

于 2013-04-14T19:40:13.983 回答
2

instanceof是你的朋友:

if (table.equals("MyTable") && newEntry instanceof MyTable)

它实际上是该isAssignableFrom方法的简写,但输入起来更容易:)

于 2013-04-14T19:40:01.937 回答
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()))
于 2013-04-14T19:40:02.327 回答
0

您可以使用MyTable.class来检索类名。

于 2013-04-14T19:37:51.680 回答