[英]Polymorphism - how to check if a superclass is a subclass?
这是我的代码:
public class WriteReviewController {
private OverviewActivity overviewActivity;
private WriteReviewActivity writeReviewActivity;
...
public WriteReviewController(AppCompatActivity appCompatActivity) {
if (appCompatActivity.getClass().isAssignableFrom(OverviewActivity.class))
this.overviewActivity = (OverviewActivity) appCompatActivity;
else if (appCompatActivity.getClass().isAssignableFrom(WriteReviewActivity.class))
this.writeReviewActivity = (WriteReviewActivity) appCompatActivity;
}
}
这是我的应用程序的 controller。 我想检查参数appCompatActivity
是OverviewActivity
还是WriteReviewActivity
。 这个方法将被这两个活动调用,只是作为参数传递this
。
这个检查是否正确或者我应该使用instaceof
而不是isAssignableFrom
?
大多数情况下应该使用instanceof
,不需要手动调用isAssignableFrom
。 如果您处理Class
对象,则应该这样做,但在这里您有实例本身。
因此,使用instanceof
您的代码将如下所示:
public class WriteReviewController {
private OverviewActivity overviewActivity;
private WriteReviewActivity writeReviewActivity;
//...
public WriteReviewController(AppCompatActivity appCompatActivity) {
if (appCompatActivity instanceof OverviewActivity)
this.overviewActivity = (OverviewActivity) appCompatActivity;
else if (appCompatActivity instanceof WriteReviewActivity)
this.writeReviewActivity = (WriteReviewActivity) appCompatActivity;
}
}
}
更简洁的代码是编写两个构造函数:
public class WriteReviewController {
private OverviewActivity overviewActivity;
private WriteReviewActivity writeReviewActivity;
//...
public WriteReviewController(OverviewActivity overviewActivity) {
this.overviewActivity = overviewActivity;
}
public WriteReviewController(WriteReviewActivity writeReviewActivity) {
this.writeReviewActivity = writeReviewActivity;
}
}
但是只有当这是您想要实例化WriteReviewController
的仅有的两种方式时,您才应该这样做。 您的代码允许传递既不是OverviewActivity
也不是WriteReviewActivity
的AppCompatActivity
,因此行为不一样,我只是提到这一点。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.