Não existe não … o unico modo de extender uma funcionalidade é dar “extends”(herança) na classe que deseja especificar.
NO caso o String nem isso é possivel pois ela é final
Não existe metaprogramação em java. Se vc quizer uma linguagem que possua isto te recomendo Ruby ou Python, que possuem classes abertas parecido com o javascript.
Para se ter uma idéia nem é possivel fazer uma função anonima igual vc esta fazendo em javascript. Em java metodos nem são cidadões de primeira classe
public class Teste {
public static void main(String[] args) throws ScriptException {
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName(“JavaScript”);
engine.eval(“var a = function (){return ‘marcelo’};”);
System.out.println(engine.eval(“a()”));
}
} [/code]
public class Teste {
public static void main(String[] args) throws ScriptException {
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName(“JavaScript”);
engine.eval(“String.prototype.teste = function (){return ‘opa’};”);
System.out.println(engine.eval("‘marcelo’.teste()"));
}
} [/code]
Agora eu entendi prq eu tenho que colocar o using System.Linq para funcionar o metodo Where e Select nas minhas listas. Eu começei a usar C# agora nesse mês em janeiro, em um projeto aqui no meu trampo, to apanhando pra caramba.
Cada dia fico mais impressionado com o que o C# tem e o Java não tem. Como por exemplo os delegates em conjunto com o lambda operator, query linq, var keyword, propriedades, anonymous types e etc…
Mas vc ta adiconando na classe String do javascript e não do Java, so esta usando um egine de script do java 6 para fazer isso a partir de um codigo java.
O cara queria saber se é possivel adicionar na classe String do java.
Por mim tinham que incorporar algo como o LINQ no Java. Os extension methods são legaizinhos, mas não deixam de ser sintax suggars. Agora, rodar queries em collections é realmente um recurso fantástico.
Em C#, para selecionar o nome de todos os alunos presentes numa turma é assim:
IList<Aluno> alunos = daoAlunos.carregarTurma(3);
IList<String> alunosPresentes = new List<String>(from aluno in alunos
where aluno.isPresente() == true
select aluno.nome);
Nada de for, e deixe que ele ache a melhor estratégia para resolver essa encrenca.
So que no meu caso eu não estou pegando apenas o Nome. Tb acho interessante essa forma usando Lambda Operators, fica bem parecido com ruby onde raramente é preciso interar uma lista.
Não é bem assim não, com o linq vc pode fazer query em praticamente qualquer coisa desde que vc tenha um provider escrito para tal. Fora que as querys linq, se vc reparar no exemplo do Vinni ela não esta como uma string igual se faz com hql. Por essa razão a query é validada em tempo de compilação, coisa que o hibernate nem sonha em fazer.
Fora que com Linq se pode criar objetos on the fly para retorno da query, coisa que o hibernate nem sonha, o maximo que se da para fazer com hibernate que é parecido seria retornar um Array de Object.
Não acho que Linq e Hibernate sejam tecnologias a se comparar, elas tem objetivos diferentes apesar de serem parecidas. Não se faz mapeamento relacional objeto com o linq como se faz com o hibernate, para isso existem outras coisas em .net como por exemplo o Entity Framework.