java检查对象是否是类和强制转换列表中的类的实例
我的对象在运行时可能有很多类。目前,为了检查它是哪个类,我有一些if语句,比如
int id = 0;
if (object instanceof Comment) {
id = ((Comment) object).getId();
}
if (object instanceof Follow) {
id = ((Follow) object).getId();
}
if (object instanceof Like) {
id = ((Like) object).getId();
}
if (object instanceof Post) {
id = ((Post) object).getId();
}
if (object instanceof User) {
id = ((User) object).getId();
}
这很管用,但感觉不太干净。我看了一下Check if an object is an instance of any one of a list of classes (Android),它提供了一种方法来检查对象是否是一个类列表中的类的实例,比如
if(myClasses.contains(obj.getClass())) {
// obj is one of the classes I care about, so do something
}
然而,这不起作用,因为我需要继续并将对象强制转换到该类
有没有人知道一种更干净的方法来bot检查我的对象类型是一个类列表中的一个类,然后将该对象强制转换到该类
差不多
if(myClasses.contains(object.getClass())) {
((CLASS_THAT_MATCHED) object).getId()
}
注意当然,通常我只会让所有的类都是一个超类的子类,这个超类有getID方法和我需要的其他方法。然而,在这个特定的实例中,这些类都需要是库类的子类。让它们从一个基类继承会破坏库中的代码。我知道这在图书馆方面是一个糟糕的设计问题,但我无法解决
# 1 楼答案
Re@Alberto Sinigalia solution
它工作得很好。。。但是在所有必要的演员阵容之后看起来很可笑;),例:
每个类实现:
# 2 楼答案
你需要使用多态性。例如,创建一个接口
让你的类来实现它。然后可以对它们中的每一个调用getId方法。此外,还可以创建一个抽象类,该类具有Post等类的基本功能。差不多吧
# 3 楼答案
然后你应该使用
interface
:但是,如果
Like
、Post
等也是库类,则可以执行以下操作: