在尝试在我的门户网站应用程序中转换context.lookup()
调用的结果时,我会在三次尝试中获得ClassCastException
以获得不同的结果。
经过一番研究后我认为:http://wiki.sdn.sap.com/wiki/display/TechTSG/%28AS+Java%29+ClassCastException+Occurs+After+Lookup+Operation能够得到答案,但并不能解释如何实施这两个步骤。
此代码适用于从list
中存储的路径获取iView的详细信息:
IiView transView1 = (IiView) context.lookup(list.get(i).toString());
但是在获取像这样的工作集的细节时:
IPcdContext attrSet = (IPcdContext) context.lookup(list.get(i).toString());
我得到ClassCastException
。任何帮助或解释为什么我得到这个错误将不胜感激!
edit2:我从context.lookup获取的对象是com.sapportals.portal.pcd.pcm.roles.PortalWorkset
,我找不到文档。
答案 0 :(得分:1)
如果context.lookup
返回PortalWorkset
,那么就无法“绕过”ClassCastException。
Casting不会将对象转换为另一个类 - 它只是告诉编译器你确定它比当前声明的类型更具体的类。在这种情况下,您说“我意识到lookup()
方法被声明为返回Object
,但是当我在这个特定的上下文中调用它时,我确信它将始终专门返回{ {1}}对象。“你在这里的假设结果是不成立,程序通过抛出异常正确地表明了这一点。
您的问题可能有两个原因:
IPcdContext
方法的字符串,所以完全回到错误的地方。在这种情况下,请确保传递给方法的参数始终正确。lookup
。在这种情况下,您需要决定如何处理返回的其他对象,并适当地处理它们(您可以使用IPcdContext
运算符来检查返回对象的类。)在任何情况下,每当你进行演员表演时,通常会先检查它是否会成功,并使用如下惯用语:
instanceof