Ich habe einen Code wie folgt:Java Generics: Ist T-Argument kann nicht in int durch Methodenaufruf Umwandlung umgewandelt werden
// This class cannot be changed
class VendorApi {
static void func1(char x) {}
static void func1(int x) {}
static void func1(float x) {}
static void func1(double x) {}
}
class Main {
static <T> void my_func(T arg) {
// much of code, which uses T
// ...
VendorApi.<T>func1(arg);
}
public static void main(String args[]) {
// call my_func for each type (char, int, float, double)
// ...
int i = 1;
my_func(i);
char c = 1;
my_func(c);
}
}
Was ich tun muss, ist jede Funktion VendorApi.func() für jede Art anrufen des Arguments von my_func(). Der gepostete Code kompiliert nicht, er zeigt eine Idee. Wie kann ich es außer Kopieren-Einfügen my_func() für jeden Typ tun?
Es klingt wie Sie für dynamische Überladungsauflösung suchen - oder etwas mehr wie C++ Templating. Keine davon existiert in Java. Eine Option ist Double-dispatch ... eine einzelne Methode, die 'Object' akzeptiert, die basierend auf dem tatsächlichen Typ die richtige' func1' -Überladung auslösen kann. Beachten Sie auch, dass Sie in Java keine tatsächlichen Primitive als generische Typargumente verwenden können. –