【问题标题】:Running into an issue with Coding to an interface in java (intelliJ IDEA)在 Java 中对接口进行编码时遇到问题(intelliJ IDEA)
【发布时间】:2018-01-24 16:14:02
【问题描述】:

我们现在正在我的 DSA 类中重新创建 List 接口以及 ArrayList 和 LinkedList 类,以显示两者在添加/删除方面的低效率 |分别获取/设置。

教授给了我们一个我以前从未听说过的概念,那就是“对接口进行编码”。帮助消除冗余似乎是合乎逻辑的,但是我遇到了一个问题,我不确定这是否是 IDE 问题,或者这是预期的行为。

像这样设置 ArrayList 时(使用自定义接口和类,而不是来自 util 包):

public class foobar{
    List<String> arraylist;

    public foobar(){
      arraylist = new ArrayList<String>();
      ...

未找到 ArrayList 类中的 size() 方法,但在 ArrayList 类中。

然而,当 ArrayList 被实例化而不编码到接口时,即。

 ...
 ArrayList<String> arraylist;
 public foobar(){
 arraylist = new ArrayList<String>();
 ...

size() 方法可用。

这是正确的行为吗? 也许我误解了这个概念以及我一直在阅读的关于接口编码的内容,但似乎唯一可用的方法是类中定义的接口中的方法。

编辑:感谢所有回复!我阅读了更多关于多态性的内容,现在一切都变得有意义了。抱歉这个愚蠢的问题,我不明白为什么它会这样工作

【问题讨论】:

  • 根据您的描述,size 方法似乎是在ArrayList(实现)中定义的,而不是在List interface 本身中定义的。因此,当您使用List 时,虽然它由ArrayList 支持,但它只能充当List,因为这就是它的全部保证。这被称为多态性
  • 如果您希望List 的所有实现都能够提供size 方法,那么您需要在List interface 中定义该合约

标签: java interface package


【解决方案1】:

由于没有人费心给出答案,我鼓励你关注这个link

看来要像上面那样使用 List 和 ArrayList,你会想要使用这样的东西......

List list = Collections.synchronizedList(new ArrayList(...));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-07
    • 1970-01-01
    • 2016-04-29
    • 1970-01-01
    • 2020-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多