Sobes.tech
Middle

Lze v Java implementovat podobnou funkci rozšíření?

sobes.tech AI

Odpověď od AI

Ano, přímo — ne, protože Java je nepodporuje na úrovni syntaxe jako Kotlin. Ale jejich chování lze napodobit pomocí statických metod ve pomocných třídách nebo vzorem Decorator.

1. Statické metody ve pomocných třídách:

Vytvoříme třídu s statickými metodami, které přijímají objekt, ke kterému chceme přidat "rozšíření" jako první argument.

public class StringExtensions {
    // Metoda, která napodobuje rozšíření pro String
    public static String capitalizeFirstLetter(String input) {
        if (input == null || input.isEmpty()) {
            return input;
        }
        return input.substring(0, 1).toUpperCase() + input.substring(1);
    }
}

Použití:

String myString = "hello";
String capitalizedString = StringExtensions.capitalizeFirstLetter(myString);

2. Decorator vzor:

Vytvoříme obalovou třídu, která implementuje stejnou rozhraní jako původní třída (nebo ji rozšiřuje) a přidává novou funkcionalitu.

public interface MyInterface {
    void originalMethod();
}
public class MyClass implements MyInterface {
    @Override
    public void originalMethod() {
        System.out.println("Původní metoda");
    }
}
// Decorátor
public class MyInterfaceDecorator implements MyInterface {
    private MyInterface decorated;

    public MyInterfaceDecorator(MyInterface decorated) {
        this.decorated = decorated;
    }

    @Override
    public void originalMethod() {
        decorated.originalMethod();
    }

    // "Rozšířená" funkcionalita
    public void newMethod() {
        System.out.println("Nová rozšířená metoda");
    }
}

Použití:

MyClass original = new MyClass();
MyInterfaceDecorator decorated = new MyInterfaceDecorator(original);
decorated.originalMethod();

decorated.newMethod();

Ačkoliv tyto přístupy nejsou tak pohodlné jako nativní rozšiřující funkce v Kotlinu, umožňují přidat funkcionalitu stávajícím třídám bez změny jejich zdrojového kódu.