1

我正在尝试访问这个受保护的类:protected boolean canDraw(),并将其值放入变量中。我尝试访问它的两种方法不起作用:

    <%@ page import="com.day.cq.wcm.foundation.Image" %>
    <%@include file="/apps/tju/global.jsp"%>
    <% //..... 
       Image thisImage = new Image(resource); %>

boolean foo = thisImage.canDraw();throws Image 类型的方法 canDraw() 不可见

boolean foo = super.canDraw();throws HttpJspBase 类型的方法 canDraw() 未定义

可以在此处找到正在使用的类的完整 javadoc:http: //dev.day.com/docs/en/cq/5-3/javadoc/com/day/cq/wcm/foundation/Image.html

4

3 回答 3

3

该方法受到保护。因此,您不能从包外部和从该类继承的类访问它。

您正试图从 JSP 页面访问受保护的方法。JSP 页面不是 Image 的子类,因此无法访问该方法。

如果没有更好的方法来做您想做的事情,请子类化 Image 并为您尝试访问的属性创建一个公共访问器。

于 2013-01-31T21:37:16.130 回答
1

好吧,它是受保护的,并且您正试图从Servlet子类中访问它(JSP 被编译成 Servlet)。按照 java 规范,你不能这样做。

将其公开(如果您有源代码),或将原始类扩展为具有提供相同数据的公共方法的类。或者(不推荐),使用反射来改变它的可访问性。

于 2013-01-31T21:39:10.760 回答
1

如其他答案中所述,您必须扩展 Image,覆盖 canDraw 并使被覆盖的方法的可见性公开。

检查canDraw()后你打算做什么?我想它受到保护是有原因的。这是推测性的,但如果您所做的只是检查 canDraw(),然后在它返回 true 时进行绘图,您实际上可以直接调用 draw()。JavaDoc 声明它在内部检查 canDraw():

http://dev.day.com/docs/en/cq/current/javadoc/com/day/cq/commons/ImageResource.html#draw(java.io.Writer)

于 2013-02-01T14:31:23.610 回答