Java泛型:实际参数T不能通过方法调用转换转换为int

我有一个这样的代码:

// 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);
          }
}

我需要做的是调用每个函数VendorApi.func()从my_func()的每个参数类型.发布的代码不编译,它显示了一个想法.除了复制粘贴每个类型的my_func()之外,我该怎么办?

您可以将func1作为消费者< T>:

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 void my_func(char arg) {  my_func(arg, VendorApi::func1); }
      static void my_func(int arg) {  my_func(arg, VendorApi::func1); }
      static void my_func(float arg) {  my_func(arg, VendorApi::func1); }
      static void my_func(double arg) {  my_func(arg, VendorApi::func1); }
      private static <T> void my_func(T arg, Consumer<T> func1) {
          // much of code, which uses T
          // ...
          func1.accept(arg);
      }

      public static void main(String args[]) {
          // call my_func for each type (char, int, float, double)
          // ...
          int i = 1;
          my_func(i, VendorApi::func1);
          char c = 1;
          my_func(c);
      }
}

这给你编译时类型的安全性(你只能从类外部调用char,int,float和double来调用my_func,因为通用版本是私有的),并避免反射.

如果要遵循Java方法命名约定,my_func应该是myFunc.

http://stackoverflow.com/questions/28109193/java-generics-actual-argument-t-cannot-be-converted-to-int-by-method-invocation

转载注明原文:Java泛型:实际参数T不能通过方法调用转换转换为int