【发布时间】:2020-07-13 07:28:15
【问题描述】:
我有一个奇怪的问题:
我有两个班级,Book 和 Newspaper。他们共享属性price。我必须实现一个PriceComparator,它显然将price 与Book 和Newspaper 进行比较。我不是太有经验 - 特别是在 Java 中,但我最重要的解决方案是制作一个接口,它可以让我获得共同的价值观,我可以根据这些进行比较,但这是不可能的,原因有两个:
1) 我只能拥有 Book、Newspaper、Main 和 PriceComparator 类,并且不允许在同一个 .java 文件中创建另一个类/接口。
2) 我必须使用一个包含Book 和Newspaper 的列表
对此我的解决方案可能是创建一个List<Object>,然后使用强制转换比较通用对象以通过它们的 getter 获取它们的值,但这对我来说似乎很笨拙,但我认为必须有更好的解决方案我想不出一个。我希望我的问题是有道理的。谢谢!
【问题讨论】:
-
显而易见的解决方案是为包含价格获取器的书籍和报纸创建一个通用的超类/接口。但是,既然你说这是明确禁止的,我也没有其他办法,只能使用
List<Object>并进行强制转换。如果Object是Book和Newspaper的唯一公共超类/接口,那么就没有其他方法可以定义同时接受这两个类的List。 -
@OHGODSPIDERS 好的,那我就在正确的轨道上,谢谢。我根本不喜欢这个解决方案,因为它看起来不必要地复杂。
-
这个作业试图教你一些不好的编程习惯。在现实世界中,Book 和 Newspaper 之间会有一些共同的接口或对象(我称之为“PrintedWork”。说实话,报纸的价格与书籍的价格相差很大。
-
@NomadMaker 我知道。这门课的作业很奇怪。一个例子是一个对象的构造函数,它只能包含两个属性,而类却有三个。绝对没有理由,因为无论如何输入都是硬编码的。而且你不需要练习使用 setter。
标签: java list comparator