[Prévia] [Próxima] [Prévia por assunto] [Próxima por assunto]
[Índice cronológico]
[Índice de assunto]
Classloading
- Subject: Classloading
- From: Giuliano Mega <megag@xxxxxxxxxxxx>
- Date: Sun, 19 Dec 2004 21:27:14 -0200
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