Use extension to avoid utility class proliferation

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.