Achei interessante…
http://www.javablackbelt.com/blog/2008/06/use-extension-to-avoid-utility-class.html
abraços.
Achei interessante…
http://www.javablackbelt.com/blog/2008/06/use-extension-to-avoid-utility-class.html
abraços.
Conheço quase nada de Java e pelo que entendi do post do cara, para ter extension methods em Java é necessário copiar o código da classe base e adicionar comportamento a esse código novo, certo?
Em .NET, nessa última versão, a Microsoft acertou nesse ponto e agora podemos extender classes do framework sem essa necessidade de “duplicação”. Acredito que esse seria um bom ponto pro pessoal da Sun se basear.
Exemplo de Extension Method em .NET:
[code]
public static class MeuStringExtender
{
public static string SubstituirAcento(this string s)
{
byte[] bytes = Encoding.GetEncoding(1251).GetBytes(s);
string strNovo = Encoding.ASCII.GetString(bytes);
return strNovo;
}
}[/code]
Exemplo de utilização:
string minhaString = "NÃO";
Console.WriteLine(minhaString.SubstituirAcento()); //Saida: NAO
no seu exemplo MeuStringExtender vc não tá estendendo nada… apenas criou um nova classe.
Estou extendendo sim! Repare na utilização que eu não chamo a classe MeuStringExtender, mas que chamo o método a partir de uma instância qualquer de uma string.
Na imagem anexo coloquei um print de como o Visual Studio entende um extension method.
Inclusive, através de Extension Methods é possível reproduzir um comportamento parecido com Duck Typing do RoR.