如何在Java中实现以下伪代码:

  class A extends B{
    int var[];
   void someFn(var, WANT TO INPUT EITHER a C1 or C2 CLASS HERE){
           //initialize var;
           // Call fn(var,C1 or C2)

    public static void main(String[] arguments){
     ///main stuff
    }

   }

  class B{
     void fn(int var[], C1 c1){return foo;}
     void fn(int var[], C2 c2){return other foo;}
    }
  class C1{stuff here}
  class C2{other stuff here}

我试过了
  class A extends B{
    int var[];
     public static <C> void someFn(var, C Cclass){
        //initialize var;
        // Call fn(var, C1 or C2)

但这没有用。我还是Java的新手。我宁愿不要重载someFn

最佳答案

通用类型
JLS-8.1.2. Generic Classes and Type Parameters 说(部分)

如果一个类声明一个或多个类型变量(§4.4),则该类是通用的。
这些类型变量称为类的类型参数。类型参数部分紧随类名之后,并用尖括号分隔。

一个例子void函数无法返回值。但是你可以做

class A<T> extends B<T> {
}

class B<T>{
    void fn(int var[], T c1){
        return;
    }
}
接口
JLS Chapter 9. Interfaces说(部分)

接口声明引入了一个新的引用类型,其成员是类,接口,常量和抽象方法。此类型没有实现,但是其他不相关的类可以通过为其抽象方法提供实现来实现它。

编程为通用的C接口,您可以避免使用泛型类型。
interface C {
   void doSomething();
}
C1C2
class C1 implements C {
   void doSomething() {
      // do something
   }
}
class C2 implements C {
   void doSomething() {
      // do something else
   }
}
然后您的B可能看起来像
class B {
    void fn(int var[], C c1){
        c1.doSomething();
        return;
    }
}

10-08 08:14