Tava olhando o código da classe RegularExpression dentro do rt.jar e me deparei com um ‘(Match)null’. Assim:
public boolean matches(char[] target, int start, int end) {
return this.matches(target, start, end, (Match)null);
}
Gostaria de saber qual o valor semântico disso(se é que existe algum) e tb a razão provável pela qual o programador/designer da classe decidiu fazer algo assim.
Pode ser que além do método matches(char[], int, int, Match) exista um com a assinatura quase igual, como matches(char[], int, int, String) por exemplo. Como ele está passando null, o compilador não sabe qual dos dois métodos você quer usar, dai o cast, pra dizer que vc quer usar o que recebe Match.
Tiago_Farias
Boa explicação. Mas não tem outro método matches com a mesma assinatura e outro tipo no último param. Mas a resposta foi realmente boa. Tipo, apesar de não existir um matches assim AGORA, pode existir no futuro. Daí a preocupação do programador em deixar o código mais funcional pra alguma utilização no futuro(até mesmo por herança…).
Mas acho q eh isso mesmo…
Vlw!
thiago.correa
Como assim não existe um método matches overloaded???!
----> public boolean matches(char[] target, int start, int end)
ele deve estar usando o (Macthes) null para o compilador não pensar que é uma chamada recursiva! Conforme a bela explicação do colega maschiojv
Tiago_Farias
Não foi oq eu quis dizer. EXISTE um matches overloaded, mas não com 4 parâmetros e o último não sendo do tipo Match. Foi oq o colega mencionou como sugestão. =]