比较对象类型

时间:2013-04-14 19:35:40

标签: java types

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

5 个答案:

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

在此示例中,如果newEntryMyTable的实例,或者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检索班级名称。