我试图更好地掌握抽象,但遇到了问题。
我有以下类(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 识别为 Mass,或者我告诉它执行此操作的方法不正确。
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 示例中那样转换质量,但我想知道这是否是最好的方法?是否可以强制采用任何对象扩展不同对象的方法?是否值得付出额外的努力,或者正在类型转换进行这种抽象的标准方法。
最佳答案
您必须使类通用,而不是方法:
public abstract class Box<T extends Mass> {
abstract void putMassInBox(T mass);
}
public class CircleBox extends Box<CircleMass> {
@Override
void putMassInBox(CircleMass mass) {
}
}
关于Java泛型抽象方法参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40314719/