我正在努力更好地掌握抽象并遇到问题。
我有以下课程:
抽象类:
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
}
}
这是Mass接口:
public interface Mass {
}
以下是它的实现:
public class CircleMass implements Mass {
}
public class SquareMass implements Mass {
}
所以我想强制一个方法根据它的实现来获取参数。我知道我可以在circleMass示例中投射质量,但我想知道这是否是最好的方法呢?是否可以强制使用任何对象扩展不同对象的方法?是值得付出额外努力还是采用标准方式进行这种抽象。
答案 0 :(得分:5)
你必须使类通用,而不是方法:
public abstract class Box<T extends Mass> {
abstract void putMassInBox(T mass);
}
public class CircleBox extends Box<CircleMass> {
@Override
void putMassInBox(CircleMass mass) {
}
}