我正在尝试访问此受保护的类: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
答案 0 :(得分:3)
该方法受到保护。因此,您无法从包外部以及从类继承的类访问它。
您正尝试从JSP页面访问受保护的方法。 JSP页面不是Image的子类,因此无法访问该方法。
如果没有更好的方法来执行您要执行的操作,请继承Image并为您尝试访问的属性创建公共访问器。
答案 1 :(得分:1)
好吧,它受到保护,你试图从Servlet
子类访问它(JSP被编译成Servlets)。你不能通过java规范来做到这一点。
将其公开(如果您有源代码),或将原始类扩展为具有提供相同数据的公共方法的类。或者(不推荐),使用反射来改变其可访问性。
答案 2 :(得分:1)
如其他答案中所述,您必须扩展Image,覆盖canDraw并将重写方法的可见性公开。
检查canDraw()后你打算做什么?我想它受到保护是有原因的。这是推测性的,但是如果你正在做的就是检查canDraw()然后绘制它是否返回true,你实际上可以直接调用draw()。 JavaDoc声明它在内部检查canDraw():