我有一个HashMap:
HashMap<String, anObjectClass> myHash = new HashMap<String, anObjectClass>();
我有anObjectClass
:
public class anObjectClass {
private String name;
private ArrayList<String> myObjectList = new ArrayList<String>();
}
我有另一个扩展我的anObjectClass
的类,它添加了另一个字符串:
public class secondObjectClass extends anObjectClass {
String quote;
}
这意味着我的HashMap中有两种对象:
我的anObjectClass
个对象String name
和ArrayList
Strings
:myObjectList
我的secondObjectClass
个对象增加了另一个String
:quote
。
我的问题是,如果我有一个String键,请说&#34; ABC&#34;。我知道我能说出是否有钥匙&#34; ABC&#34;在我的HashMap中使用containsKey()
方法。但是一旦我找到了一个键&#34; ABC&#34;,我如何判断它是anObjectClass
个对象还是secondObjectClass
个对象?换句话说,如何判断哪种对象与该键匹配?提前谢谢。
答案 0 :(得分:2)
对于您控制定义的对象,请定义一个布尔值
boolean isBaseClass() { return(true); }
and in the subclass define
boolean isBaseClass() { return(false): }
但更一般地说,使用方法继承而不是这种测试, 因为它可以扩展到任何类别的家庭。
//坏
if(x.isBaseClass()) { doThis(); } else { doThat(); }
//更好
x.doNextThing()
答案 1 :(得分:1)
您可以使用关键字instanceof
来确定Java中不同对象的类型。
在您的示例中,假设您要确定对象obj
的类型,该对象是anObjectClass
或secondObjectClass
的实例。您可以使用以下代码告诉类型:
if(obj instanceof secondObjectClass) {
// obj is of type secondObjectClass
} else if(obj instanceof anObjectClass) {
// obj is of type anObjectClass
}
这很好,但要注意 - 类型是传递。也就是说,secondObjectClass
的实例也是anObjectClass
类型的实例,因为它是它的子类。因此,在使用instanceof
时尽可能具体。
答案 2 :(得分:0)
您还可以使用isAssignableFrom
类的Class
方法。
所以你的代码看起来像
if(obj.getClass().isAssignableFrom(BaseClass.class)) {
//bla
}
if(obj.getClass().isAssignableFrom(SuperClass.class)) {
//blabla
}
我喜欢这个,因为我不必担心if else的顺序,也不需要在elses上编写嵌套。
修改强>
按顺序我的意思是在使用instanceof时,你的if elses必须以在检查基类instanceof之前检查子类的方式放置。很抱歉造成任何混淆。谢谢@EJP指出。