我具有以下类层次结构:
Base
\
+-- A
|
+-- B
|
+-- C
我想设计一个单一的通用方法,该方法可以接受从 Base 派生的任何类,例如 A,B,C ... Z ,而不是 Base 本身。
有可能吗?
P.S。主要思想是做这样的事情:
public void<TYPE> myMethod(TYPE arg) {}
其中:TYPE是从 Base 派生的任何类型,但不包括它,并且在对方法进行参数化(是正确的单词吗?)时,其类型为 A 。参数类型,但允许使用 A 。同样适用于 A .. Z 。
我想出了一个主意。
我把设计好的 将 Helper 类放入同一包中,并使其变得非常简单:
public class Helper<T extends Base> {
public void myMethod(T item) {}
}
这样,我就可以禁止诸如此类的事情
Helper<Base> helper = new Helper<>();
helper.myMethod(new A());
helper.myMethod(new B());
它的工作原理类似于
Helper<A> helperA = new Helper<>();
Helper<B> helperB = new Helper<>();
Helper<Base> helperBase = new Helper<>(); // error
helperA.myMethod(new A());
helperA.myMethod(new B()); // error
helperB.myMethod(new B());
如预期的那样。
还有更好的方法吗?
答案 0 :(得分:2)
是的,有可能。您可以将Base
声明为abstract
,这将使其无法实例化。
答案 1 :(得分:-2)
您的通用方法应如下所示
public <T extends Base> void helloWorld(T args) {
if(args instanceof Base)
return;
System.out.println("do something with args");
}