通用方法。仅子类

时间:2018-08-09 07:31:24

标签: java generics

我具有以下类层次结构:

Base
    \
     +-- A
     |
     +-- B
     |
     +-- C

我想设计一个单一的通用方法,该方法可以接受从 Base 派生的任何类,例如 A,B,C ... Z ,而不是 Base 本身。

有可能吗?

P.S。主要思想是做这样的事情:

public void<TYPE> myMethod(TYPE arg) {}

其中:TYPE是从 Base 派生的任何类型,但不包括它,并且在对方法进行参数化(是正确的单词吗?)时,其类型为 A 。参数类型,但允许使用 A 。同样适用于 A .. Z


我想出了一个主意。

  1. 我已将 Base 打包为私有
  2. 我把设计好的 将 Helper 类放入同一包中,并使其变得非常简单:

    public class Helper<T extends Base> {
        public void myMethod(T item) {}
    }   
    
  3. 我已将所有调用代码移至另一个程序包。

这样,我就可以禁止诸如此类的事情

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());

如预期的那样。

还有更好的方法吗?

2 个答案:

答案 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");
}