Wpis z mikrobloga

hej mirki, potrzebuję pomocy, przy pozyskaniu pewnej informacji w #java. otóż posiadając klasę generyczną chciałbym dobrać się do nazwy klasy generycznej

class Printer {

void print(){
System.out.println({coś ala T.getClassName()});
}

}
  • 11
@Eoghan a co w przypadku kiedy typ generyczny jest przekazywany w klasie generycznej, faktycznie może za bardzo uprościłem to co chciałem zrobić

class Printer {

void print(Function>){
System.out.println({coś ala T.getClassName()});
}

}
@JacobTheLiar: myślę, że niewiele się to różni i powinieneś do metody dodać drugi parametr typu Class. Wtedy przekażesz np print(x -> cośTam, X.class). Jeśli masz kilka parametrów generycznych, to możesz wykorzystać np. varargs. Albo ewentualnie myślę, że dałoby się opakować w jakiś dodatkowy wrapper i będziesz miał
void print(FunctionWithType)
@Eoghan ok, zmodyfikowałem choć mi się to nie bardzo podoba ( ͡° ʖ̯ ͡°), proszę oceńcie czy to jest prawilne w #java

class Printer {

void print(Function>, Class withClass){
System.out.println("executed with: " + withClass.getSimpleName());
}

}
@JacobTheLiar: Pomijając brakująca nazwę pierwszego parametru to wygląda ok, sam bym od tego zaczął i później ewentualnie szukał jak to zapisać ładniej. Da się tutaj pomyśleć, żeby zrobić to jakoś inaczej, ale jeśli chcesz, tylko takiego printlna, to tak bym to zostawił.
@Eoghan tak błąd jest brak nazwy parametru, ale o kontekst chodzi tutaj zapis uprościłem do niezbędnego minimum. Obecnie mam tak zrobione.

@globalbus posiedziałem pokombinowałem, ale próba wykonania tego jak w Jackson wywołuje mi ... ClassCastException: class java.lang.Class cannot be cast to class java.lang.reflect.ParameterizedType ...

w konstrukotrze wykonałem następujące operacje metodą kopiego pastera

Type superClass = getClass().getGenericSuperclass();
Type genericType = ((ParameterizedType) superClass).getActualTypeArguments()[0];
System.out.println(String.format("created [%s] for [%s]: ", getClass().getSimpleName(), genericType.getSimpleName()));
tak więc ... (