如何在Java中创建某个对象类型的List?

时间:2016-09-04 17:37:43

标签: java oop polymorphism

我试图用Java来解决OOP,我遇到了一个我无法理解/解决的常见问题。我已经研究了这个主题,我找到了相关材料,但我仍然无法理解。 (请原谅我的无知)。

1-我有一个只包含一个方法的接口,实现此方法时应该返回一个字符串列表。 (一切都很好)

2-抽象类实现了接口,它包含一些额外的方法,例如:

public void setSomething(List<MyInterface> something) { this.something = something; }

public List<MyInterface> getSomething() { return something; }

现在,一个新的子类扩展了抽象类,我尝试做的其中一件事就是调用方法setSomething并创建一个MyInterface类型的列表。

有人可以指出我如何实现这个目标的正确方向吗?

谢谢

2 个答案:

答案 0 :(得分:0)

以最简单的方式

public List<Whatever> generateList() { 
  List<Whatever> results = new ArrayList<>();
  results.add(new Whatever());
  return results;
}

好的,认真的:上面返回一个空列表。但这应该足以进行一些初步测试。

然后你可以继续前进

class DerivedClass ... {

   private final List<YourInterface> someObjects;

   void setSomething(List<YourInterface> otherObjects) {
     this.someObjects = otherObjects;
   }

   List<YourInterface> getSomething() {
     return this.someObjects;
   }

...添加实际的对象,当然,只有你知道如何创建。

或许,根据您的意见选择真正简单的解决方案:

@type {void}

编辑:您的问题似乎是您不知道如何创建界面的对象。事情是:这是不可能的。您只能为实例化(调用new)。换句话说:你需要一些实现 MyInterface的类;你是那个阶级的“新”对象;并将这些对象添加到列表中。

答案 1 :(得分:0)

创建列表

创建“MyInterface类型列表”就像调用构造函数一样简单:

List<MyInterface> list = new ArrayList<>();

您可以在List界面的多个实现之间进行选择:LinkedListArrayList等。

您可以在Java教程中了解List接口的实现:https://docs.oracle.com/javase/tutorial/collections/implementations/list.html

创建接口类型

的对象

现在,如果要实际创建类型为MyInterface的对象并将其添加到列表中,则需要创建实现MyInterface的类的对象。那就足够了。例如:

class A implements MyInterface {...}
list.add(new A());

您可以在此帖子中了解有关使用类型接口实例化对象的更多信息:Creating interface objects in java

调用方法

调用setSomething方法与在您创建的对象上调用它一样简单:

MySubClass myObj = new MySubClass();
myObj.setSomething(list);

读数

但是,我认为你的困惑不是来自对面向对象编程缺乏了解,而是更具体地说是Java中的泛型。

您可以在这里阅读Java教程中的泛型:https://docs.oracle.com/javase/tutorial/java/generics/index.html