无法绕过ClassCastException

时间:2012-07-17 15:42:21

标签: java sap enterprise-portal

在尝试在我的门户网站应用程序中转换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。任何帮助或解释为什么我得到这个错误将不胜感激!

编辑:这是代码的基础:http://www.sdn.sap.com/irj/scn/go/portal/prtroot/docs/library/uuid/6112ecb7-0a01-0010-ef90-941c70c9e401?overridelayout=true

edit2:我从context.lookup获取的对象是com.sapportals.portal.pcd.pcm.roles.PortalWorkset,我找不到文档。

1 个答案:

答案 0 :(得分:1)

如果context.lookup返回PortalWorkset,那么就无法“绕过”ClassCastException。

Casting不会对象转换为另一个类 - 它只是告诉编译器你确定它比当前声明的类型更具体的类。在这种情况下,您说“我意识到lookup()方法被声明为返回Object,但是当我在这个特定的上下文中调用它时,我确信它将始终专门返回{ {1}}对象。“你在这里的假设结果是不成立,程序通过抛出异常正确地表明了这一点。

您的问题可能有两个原因:

  1. 你的假设一般是正确的,但是由于逻辑错误,你没有传递你期望IPcdContext方法的字符串,所以完全回到错误的地方。在这种情况下,请确保传递给方法的参数始终正确。
  2. 您的假设不正确,您可能 总是得到lookup。在这种情况下,您需要决定如何处理返回的其他对象,并适当地处理它们(您可以使用IPcdContext运算符来检查返回对象的类。)
  3. 在任何情况下,每当你进行演员表演时,通常会先检查它是否会成功,并使用如下惯用语:

    instanceof