Sobes.tech
Middle

Jak można określić typ parametru używanego w ogólnej klasie podczas działania programu?

sobes.tech AI

Odpowiedź od AI

W Javie, z powodu wymazywania typów (type erasure) podczas kompilacji, informacje o typach parametrów generycznych nie są przechowywane w kodzie bajtowym, więc nie można bezpośrednio określić typu parametru w czasie wykonywania.

Istnieje jednak kilka sposobów uzyskania tych informacji:

  1. Użycie klasy TypeToken lub podobnych konstrukcji: Podczas tworzenia instancji klasy generycznej można przekazać obiekt Class<T> lub użyć anonimowej podklasy, aby zachować informacje o typie.

  2. Refleksja z użyciem ParameterizedType: Jeśli klasa generyczna przechowuje informacje o typie w polu lub konstruktorze, można uzyskać je przez refleksję.

Przykład z przekazaniem Class<T>:

public class GenericClass<T> {
    private Class<T> type;

    public GenericClass(Class<T> type) {
        this.type = type;
    }

    public void printType() {
        System.out.println("Typ parametru: " + type.getName());
    }
}

GenericClass<String> instance = new GenericClass<>(String.class);
instance.printType(); // Wyświetli: Typ parametru: java.lang.String

Zatem, aby określić typ parametru w czasie wykonywania, zazwyczaj trzeba go jawnie przekazać lub przechowywać, ponieważ standardowe mechanizmy Javy nie pozwalają go uzyskać z powodu wymazywania typów.