有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java通用方法。仅子类

我有以下类层次结构:

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

我想设计一个单一的泛型方法,可以接受从Base派生的任何类,例如a、B、C。。。Z但不是本身

这有可能吗?怎么可能

另外,主要的想法是这样做:

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

其中:TYPE是从Base派生的任何类型,不包括它,并且当方法被参数化时(这是正确的词吗?)对于say typeA,除了A之外,不允许使用其他参数类型。同样适用于A。。Z


我想出了一个办法来做这件事

  1. 我已将基本包设置为私有
  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) 个答案

  1. # 1 楼答案

    是的,这是可能的。您可以将Base声明为abstract,这将使其无法实例化

  2. # 2 楼答案

    您的通用方法应该如下所示

    public <T extends Base> void helloWorld(T args) {
    if(args instanceof Base) 
       return;
    System.out.println("do something with args");
    }