Por que o JSP é ciumento com o out.print ?

Gente, por capricho mesmo eu queria criar um método que fizesse o out.println mas tenho erro
"Cannot refer to the non-final local variable out defined in an enclosing scope" , agora quando uso o out.println fora de um método, funciona normalmente. Já tentei herdar a classe JspWriterImpl mas o jsp não deixa usar os seus métodos.

Vejam o meu código que dá erro quando eu ponho out.println dentro de um método meu.

<htmL>
<head>
 <title> oooo</title>
</head>
<body> 
<%@ page import="java.sql.*" %>
<%@ page import="java.io.*" %>

<%
  class R{
     public String goza(){
        return "alguma coisa";
     }

     public void Grita(String texto){
       out.println(texto);
     }
  }
%>

<%
R web = new R();
web.Grita(web.goza());  
out.println(out.getClass().getSimpleName());

%>
</body>
</html>

Vejamos

eu acho que o que rola é o seguinte: out é uma variavel, quando vc cria uma classe, o metodo Grita tem uma referencia de uma variavel externa que não é final, e o compilador não permite isso.

por exemplo, se vc criar um atributo na classe R e initializa-lo no construtor ( tipo new R(out) ) deve funcionar de boas.

qual o motivo? eu imagino alguns:

  1. se out virar outra coisa seu codigo vai se comportar de forma inesperada ( fazendo out = outra-coisa )
  2. out provavelmente não existe ou esta em algum estado inconsistente quando a classe R é compilada
  3. out pode não ser coletada pelo garbage collector pois existe uma referencia dentro de um metodo
  4. é dificil fazer certas otimizações com out não sendo final