Java Can';I don’我不能回避一个例外
在我的门户应用程序中尝试强制转换Java Can';I don’我不能回避一个例外,java,sap,enterprise-portal,Java,Sap,Enterprise Portal,在我的门户应用程序中尝试强制转换context.lookup()调用的结果时,在三次尝试强制转换不同结果中,有两次尝试得到ClassCastException 经过一些研究,我认为:答案是肯定的,但它并没有真正解释如何执行这两个步骤 此代码用于从存储在列表中的iView路径获取iView的详细信息: IiView transView1 = (IiView) context.lookup(list.get(i).toString()); 但在获取工作集的详细信息时,如下所示: IPcdConte
context.lookup()
调用的结果时,在三次尝试强制转换不同结果中,有两次尝试得到ClassCastException
经过一些研究,我认为:答案是肯定的,但它并没有真正解释如何执行这两个步骤
此代码用于从存储在列表中的iView路径获取iView的详细信息:
IiView transView1 = (IiView) context.lookup(list.get(i).toString());
但在获取工作集的详细信息时,如下所示:
IPcdContext attrSet = (IPcdContext) context.lookup(list.get(i).toString());
我得到一个ClassCastException
。任何关于我为什么会出现这个错误的帮助或解释都将不胜感激
编辑:这是代码的基础:
edit2:我从context.lookup返回的对象是com.saportals.portal.pcd.pcm.roles.PortalWorkset
,我找不到相关文档。如果context.lookup
返回一个PortalWorkset
,则无法“绕过”ClassCastException
强制转换不会将一个对象转换为另一个类——它只是告诉编译器您确信它是一个比当前声明的类型更具体的类的一种方式。在本例中,您的意思是“我意识到lookup()
方法被声明为返回Object
,但是当我在这个特定上下文中调用它时,我确信它总是会明确返回IPcdContext
对象。”您在这里的假设被证明不成立,程序通过抛出异常正确地发出信号
您的问题可能有两个原因:
一般来说,您的假设是正确的,但是由于一个逻辑错误,您没有将期望的字符串传递给lookup
方法,因此将错误的内容全部返回。在这种情况下,请确保传递给方法的参数始终正确
您的假设是不正确的,并且您可能不会总是返回IPcdContext
。在这种情况下,您需要决定如何处理返回的其他对象,并适当地处理它们(您可以使用instanceof
操作符检查返回对象的类)
在任何情况下,无论何时你做一个角色转换,首先检查它是否成功通常是有益的,使用一个成语,如:
IPcdContext context;
Object obj = context.lookup("foo");
if (obj instanceof IPcdContext) {
context = (IPcdContext)obj;
}
else {
// You got back something else. What to do?
}
确切的异常文本是什么?可能是因为从上下文中返回的任何内容都不是IPcdContext
。您应该将其捕获为对象
,然后执行.getClass().getName()
以了解您得到了什么。