En JavaScript, es fácil modificar (o incluso reemplazar por completo) las clases integradas. Uno podría simplemente escribir el nombre de un método e inyectarlo en una clase integrada en JavaScript simplemente escribiendo = y definiendo una función. Entonces este método se puede usar en cada instancia de esa clase.
Por ejemplo, inyecté un método de multiply en la clase integrada String JavaScript que multiplica la cadena que contiene el objeto de cadena un número determinado de veces.
¿Puedo hacer algo similar en Java?
Sé que puedo extender alguna clase integrada y en mi clase personalizada definir este método. Pero, ¿es posible inyectar un método en una clase Java integrada como en JavaScript para que en todas partes donde se use esa clase en el programa esté disponible este método personalizado?
Esto es posible hacerlo durante el tiempo de ejecución. Pero la respuesta simple es que no quieres hacer eso. La modificación del código de bytes es extremadamente frágil y compleja. Y mucho menos que su código tampoco se compilará si llama directamente al nuevo método que ha inyectado, lo que significa que debe recurrir a métodos costosos como Reflection.
Su mejor alternativa sería crear una clase de utilidad para Strings que tenga este método de multiplicación. Algo como esto:
public class StringUtil { public static String multiply(String s1, int i) { ... } }Para las clases no finales (por lo tanto, no la clase String), también puede optar por extender la clase y agregar sus métodos a la clase recién creada:
public class MyType extends Type { public static SomeType someMethod() { ... } } Esto requerirá que reemplace todos los tipos de tipo Type con MyType
No entiendo completamente su ejemplo, pero parece que String#repeat(int) podría hacer lo mismo que está tratando de lograr.