我有一个名为DrawableSegment
的接口和多个实现该接口的类,例如LineSegment
和PercentageSegment
。
我还有另一个名为BarChart
的类,它利用了这些类。
例如,BarChart
有一个名为Add(DrawableSegment segment)
的方法,该方法可以接受实现该接口的任何对象。
我想将其限制为实现该接口的相同类型的对象。因此,我不想将LineSegments
与PercentageSegments
混合使用,如果我添加了LineSegment
,我希望其余的添加项也都是LineSegments
。如果我添加PercentageSegments
,我希望其余的都是PercentageSegments
,如果我确实尝试添加LineSegment
,我希望它是类型错误。>
有没有办法表达这个?
答案 0 :(得分:2)
这是你的意思吗?
import java.util.ArrayList;
import java.util.List;
interface DrawableSegment {}
class LineSegment implements DrawableSegment {}
class PercentageSegment implements DrawableSegment {}
class BarChart<T extends DrawableSegment> {
private List<T> drawableSegments = new ArrayList<>();
public void add(T drawableSegment) {
this.drawableSegments.add(drawableSegment);
}
public List<T> getDrawableSegments() {
return this.drawableSegments;
}
}
public static void main(String[] args) {
BarChart<LineSegment> barCharLineSegment = new BarChart<LineSegment>();
barCharLineSegment.add(new LineSegment());
barCharLineSegment.add(new PercentageSegment()); // Compiler Error: cannot be applied
}
答案 1 :(得分:1)
如果我正确理解了您的问题,则希望在运行时处检查对象的类型,这意味着如果添加了LineSegment
,则随后的分配只会允许{{1} },而不是LineSegment
。在这种情况下,我们可以在运行时检查第一个项目的类,然后将其与下一个项目进行比较。请查看我的代码是否有帮助:
PercentageSegment