Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Can';I don’我不能回避一个例外_Java_Sap_Enterprise Portal - Fatal编程技术网

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()
    以了解您得到了什么。