1

この保護されたクラスにアクセスしようとしています: protected boolean canDraw()、その値を変数に入れようとしています。アクセスしようとしている2つの方法が機能していません。

    <%@ 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メソッド canDraw() は型 HttpJspBase に対して未定義です

使用されているクラスの完全な 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

他の回答で述べたように、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 に答える
1

それは保護されており、サブクラスからアクセスしようとしていますServlet(JSP はサーブレットにコンパイルされます)。Javaの仕様上、それはできません。

公開するか (ソース コードがある場合)、元のクラスを拡張して、同じデータを提供する public メソッドを持つクラスにします。または (推奨されません)、リフレクションを使用してアクセシビリティを変更します。

于 2013-01-31T21:39:10.760 に答える