2013-01-31 6 views
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();

boolean foo = super.canDraw();

방법 발생 유형 이미지에서 방법 canDraw()가 표시되지 발생 canDraw()는 HttpJspBase 유형에 대해 정의되지 않았습니다.

사용중인 클래스의 전체 javadoc를 찾을 수 있습니다. e : http://dev.day.com/docs/en/cq/5-3/javadoc/com/day/cq/wcm/foundation/Image.html

답변

3

이 방법은 보호되어 있습니다. 따라서 패키지 외부와 클래스에서 상속 한 클래스에는 액세스 할 수 없습니다.

JSP 페이지에서 보호 된 메소드에 액세스하려고합니다. JSP 페이지는 Image의 하위 클래스가 아니므로 메서드에 액세스 할 수 없습니다.

수행하려는 작업을 수행하는 더 좋은 방법이 없다면 이미지를 서브 클래스 화하고 액세스하려는 속성에 대한 공용 접근을 만드십시오.

+0

거의 사실이지만 같은 패키지에 클래스에서 보호 필드/메소드도 액세스 할 수 있습니다 Javadoc가 내부적으로() canDraw을 확인 말한다. – emka86

+0

또한 같은 패키지의 클래스에서. –

+0

불행히도 소스 코드에 액세스 할 수 없습니다. –

1

글쎄, 보호되어 있고 서브 클래스 Servlet (JSP가 서블릿으로 컴파일 됨)에서 액세스하려고합니다. 당신은 자바 사양에 의해 그렇게 할 수 없다.

소스 코드가있는 경우이를 공개하거나 원래 클래스를 동일한 데이터를 제공하는 public 메서드가있는 클래스로 확장하십시오. 또는 (권장하지 않음) 리플렉션을 사용하여 액세스 가능성을 변경하십시오.

+0

불행히도 소스 코드에 액세스 할 수 없으므로 공개 할 수 없습니다. 반성이란 무엇입니까? –

1

다른 답변에서 언급했듯이 이미지를 확장해야 할 경우 canDraw를 재정의하고 재정의 된 메소드의 공개를 공개로 설정하십시오.

canDraw()를 확인한 후에 무엇을 할 계획입니까? 나는 그것이 이유로 보호된다고 상상한다. 이것은 투기 적입니다 만, canDraw()를 확인한 다음 true를 반환하면 draw()를 직접 호출 할 수 있습니다.

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

+0

반환 값이 부울이기 때문에 테스트하기에 좋은 연습이라고 생각했습니다. 이것은 실제 응용보다 학습을위한 것입니다. –

관련 문제