gpt4 book ai didi

java - 无法绕过 ClassCastException

转载 作者:行者123 更新时间:2023-12-01 15:16:27 24 4
gpt4 key购买 nike

在我的门户应用程序中尝试转换 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 我找不到相关文档。

最佳答案

如果context.lookup返回给您 PortalWorkset ,那么就没有办法“绕过”ClassCastException。

转换不会将对象转换为不同的类 - 它只是告诉编译器您确定它是一个比当前声明的类型更具体的类的一种方式。在这种情况下,您是说“我意识到 lookup() 方法被声明为返回 Object ,但是当我在这个特定上下文中调用它时,我确信它总是会专门返回 IPcdContext 对象。 ”事实证明,您的假设并不成立,并且程序通过抛出异常来正确地发出信号。

您的问题有两个潜在原因:

  1. 您的假设总体上是正确的,但由于逻辑错误,您没有将预期的字符串传递给 lookup方法,所以完全找回了错误的东西。在这种情况下,请确保传递给方法的参数始终正确。
  2. 您的假设不正确,您可能不会总是得到 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?
}

关于java - 无法绕过 ClassCastException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11526069/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com