Peut-on implémenter une fonction d'extension similaire en Java?
sobes.tech IA
Réponse de l'IA
Oui, directement — non, car Java ne les supporte pas au niveau de la syntaxe comme Kotlin. Mais leur comportement peut être simulé en utilisant des méthodes statiques dans des classes utilitaires ou le pattern Decorator.
1. Méthodes statiques dans des classes utilitaires :
On crée une classe avec des méthodes statiques qui prennent un objet auquel on souhaite ajouter une "extension" en premier argument.
public class StringExtensions {
// Méthode simulant une extension pour String
public static String capitalizeFirstLetter(String input) {
if (input == null || input.isEmpty()) {
return input;
}
return input.substring(0, 1).toUpperCase() + input.substring(1);
}
}
Utilisation :
String myString = "hello";
String capitalizedString = StringExtensions.capitalizeFirstLetter(myString);
2. Pattern Decorator :
On crée une classe wrapper qui implémente la même interface que la classe d'origine (ou l'étend) et ajoute de nouvelles fonctionnalités.
public interface MyInterface {
void originalMethod();
}
public class MyClass implements MyInterface {
@Override
public void originalMethod() {
System.out.println("Méthode originale");
}
}
// Decorateur
public class MyInterfaceDecorator implements MyInterface {
private MyInterface decorated;
public MyInterfaceDecorator(MyInterface decorated) {
this.decorated = decorated;
}
@Override
public void originalMethod() {
decorated.originalMethod();
}
// Fonctionnalité "étendue"
public void newMethod() {
System.out.println("Nouvelle méthode étendue");
}
}
Utilisation :
MyClass original = new MyClass();
MyInterfaceDecorator decorated = new MyInterfaceDecorator(original);
decorated.originalMethod();
decorated.newMethod();
Bien que ces approches ne soient pas aussi pratiques que les fonctions d'extension natives en Kotlin, elles permettent d'ajouter des fonctionnalités aux classes existantes sans modifier leur code source.