如何在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();
}
像C1
和C2
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;
}
}