[Prévia] [Próxima] [Prévia por assunto] [Próxima por assunto]
[Índice cronológico] [Índice de assunto]

Classloading



    Oi, pessoal,

    Toda vez que leio aquele artigo do Liang e do Bracha, fico confuso 
com uma coisa.
    Eles prop�em l� aquela solu��o pro problema da seguran�a dos tipos 
que � baseada na imposi��o de restri��es que atuam no momento da carga 
de classe, motivada pela seguinte frase (se��o 4.2.1):

    "A straightforward solution to the type-safety problem is to 
uniformly use both the class's name and its defining loader to represent 
a class type (...). The only way to determine the defining loader, 
however, is to actually load the class through the initiating loader. 
(...) The shortcoming of this approach is that is sacrifices lazy class 
loading".

    Da� eu sempre fico aqui pensando... caramba, as restri��es na hora 
da carga da classe de fato resolvem o problema, mas n�o seria mais 
natural implantar tipos "din�micos" e inserir uma restri��o simplona de 
tipagem nas refer�ncias? Vou me explicar melhor:

    Suponha que uma classe A declara um campo (ou vari�vel local, dentro 
de um m�todo mesmo) de uma classe C1. Se a classe A � carregada com o 
classloader L1, ent�o a JVM passa a enxergar a classe A como sendo do 
tipo "din�mico" (A,L1), marcando a refer�ncia � classe C1, presente na 
classe A, como sendo do tipo "din�mico" (C1,L1).  Vou at� pegar o 
exemplo do artigo:


    class <A, L1){
       void f(){
          <C1, L1>x = <B, L2>.g();
       }
    }

    class <B, L2>{
       <C1, L2> g() {...}
    }
   
    Bem, da� o c�digo de A faz uma refer�ncia � classe B que, por 
mal�cia, � delegada por L1 ao loader L2. O loader L2 carrega a classe B 
e encontra nela uma refer�ncia ao texto da classe C1 e a carrega. O tipo 
din�mico da refer�ncia retornada pelo m�todo G passa a ser <C1, L2>. 
Quando o c�digo malicioso tenta atribuir a uma refer�ncia do tipo 
din�mico <C1, L1> um objeto do tipo din�mico <C1, L2>, ele toma um 
ClassCastException.

    Pronto, acabo de refor�ar a seguran�a de tipos sem perder o lazy 
loading e nem usar classloading constraints. A �nica desvantagem, me 
parece, � que vai ter de rolar uma checagem de tipos em tempo de 
execu��o, o que pode ir contra a filosofia de que toda e qualquer 
checagem tem de ser feita at� o momento de carga da classe - depois 
disso, voc� n�o pode checar mais nada.

    Bem, se algu�m puder me ajudar com essa d�vida, eu agrade�o.

       Um abra�o,

          Giuliano