簡體   English   中英

無法訪問實例化類的受保護方法

[英]Can't Access Protected Method of Instantiated Class

我正在嘗試訪問此受保護的類: 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(); 拋出HttpJspBase類型的canDraw()方法未定義

可以在以下位置找到所使用類的完整javadoc: http : //dev.day.com/docs/en/cq/5-3/javadoc/com/day/cq/wcm/foundation/Image.html

該方法受到保護。 因此,您不能從包以及從該類繼承的類的外部訪問它。

您正在嘗試從JSP頁面訪問受保護的方法。 JSP頁面不是Image的子類,因此無法訪問該方法。

如果沒有更好的方法來執行您要執行的操作,請對Image進行子類化,並為要嘗試訪問的屬性提供公共訪問器。

好吧,它受到保護,您正在嘗試從Servlet子類訪問它(JSP被編譯為Servlet)。 根據Java規范,您不能這樣做。

將其公開(如果您有源代碼),或者將原始類擴展為具有提供相同數據的公共方法的類。 或者(不建議),使用反射更改其可訪問性。

如其他答案中所述,您將必須擴展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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM