首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >碳烟: soot.jimple.JimpleBody不能投给soot.dava.DavaBody

碳烟: soot.jimple.JimpleBody不能投给soot.dava.DavaBody
EN

Stack Overflow用户
提问于 2018-12-20 03:39:17
回答 2查看 171关注 0票数 0

我运行了以下代码来获取.class文件中的异常处理程序:

代码语言:javascript
复制
public void getException(SootMethod method){
    DavaBody db = (DavaBody) method.retrieveActiveBody();
    IterableSet excepFacts = db.get_ExceptionFacts();
    Iterator<ExceptionNode> it = excepFacts.iterator();
    while(it.hasNext()){
        ExceptionNode en = it.next();
        ...
    }
}

在运行上面的代码后,我发现了错误:

代码语言:javascript
复制
Exception in thread "main" java.lang.ClassCastException: 
soot.jimple.JimpleBody cannot be cast to soot.dava.DavaBody

方法method.retrieveActiveBody()返回Body类型,而不是JimpleBody,那么为什么会发生此错误?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-01-04 13:25:57

根据文档public Body retrieveActiveBody()是:

如果存在,则返回活动体,否则构造一个活动体并返回它。

让我们看一下Body类:

代码语言:javascript
复制
public abstract class Body
extends AbstractHost
implements Serializable

因此,它是Abstract类,并且在异常情况下,它返回JimpleBodyBody的子类。

如果RabbitAnimal,而Wolf也是Animal,则Rabbit不是Wolf

您可以这样编辑代码:

代码语言:javascript
复制
if (method.retrieveActiveBody() instanceof JimpleBody) {

} else if (method.retrieveActiveBody() instanceof DavaBody) {

} else if (method.retrieveActiveBody() instanceof BafBody) {

} else if (method.retrieveActiveBody() instanceof StmtBody) {

} else {

}
票数 1
EN

Stack Overflow用户

发布于 2019-01-04 10:17:27

主体是声明的类型。在您的碳烟配置中,它实际上返回一个JimpleBody。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53862112

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档