java通用方法。仅子类
我有以下类层次结构:
Base
\
+-- A
|
+-- B
|
+-- C
我想设计一个单一的泛型方法,可以接受从Base派生的任何类,例如a、B、C。。。Z但不是基本身
这有可能吗?怎么可能
另外,主要的想法是这样做:
public void<TYPE> myMethod(TYPE arg) {}
其中:TYPE是从Base派生的任何类型,不包括它,并且当方法被参数化时(这是正确的词吗?)对于say typeA,除了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());
如预期的那样
有没有更好的办法
# 1 楼答案
是的,这是可能的。您可以将
Base
声明为abstract
,这将使其无法实例化# 2 楼答案
您的通用方法应该如下所示