Java 泛型抽象方法参数

Java generic abstract method parameters

我正在努力更好地掌握抽象并运行遇到一个问题。

我有以下 classes:

摘要class:

public abstract class Box {
    abstract <T extends Mass> void putMassInBox(T mass);
}

实现:

public class CircleBox extends Box {

    @Override
    void putMassInBox(Mass mass) {
        CircleMass circleMass = (CircleMass) mass;
    }   

}

下面的那个会导致错误,因为它无法将 SquareMass 识别为质量,或者我告诉它的方法不正确。

public class SquareBox extends Box {

    @Override
    void putMassInBox(SquareMass mass) {
        // TODO Auto-generated method stub

    }

}

这是群发界面:

public interface Mass {

}

下面是它的实现:

public class CircleMass implements Mass {

}


public class SquareMass implements Mass {

}

所以我想强制采用一种方法,该方法根据它的实现方式获取参数。我知道我可以像 circleMass 示例中那样投射质量,但我想知道这是否是最好的方法?是否可以强制采用任何对象扩展不同对象的方法?是否值得付出额外的努力,或者正在铸造进行这种抽象的标准方法。

您必须使 class 通用,而不是方法:

public abstract class Box<T extends Mass> {
    abstract void putMassInBox(T mass);
}

public class CircleBox extends Box<CircleMass> {

    @Override
    void putMassInBox(CircleMass mass) {
    }   

}