无法访问实例化类的受保护方法

时间:2013-01-31 21:34:23

标签: java jsp protected cq5

我正在尝试访问此受保护的类: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();抛出来自Image类型的方法canDraw()不可见

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

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

3 个答案:

答案 0 :(得分:3)

该方法受到保护。因此,您无法从包外部以及从类继承的类访问它。

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

如果没有更好的方法来执行您要执行的操作,请继承Image并为您尝试访问的属性创建公共访问器。

答案 1 :(得分:1)

好吧,它受到保护,你试图从Servlet子类访问它(JSP被编译成Servlets)。你不能通过java规范来做到这一点。

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

答案 2 :(得分: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)