0

这是我之前参加的工作面试测试中的一个问题。我不知道为什么有人会想要这样做,或者是否有可能,但有人会如何填充这个集合?

Collection<MyLinks> links = null;    //Populate this variable

public interface MyLinks() {
    //Method headers only
}

如果无法实例化 MyLinks 对象,如何填充此集合?这是一个技巧问题吗?

4

6 回答 6

2

用实现接口的对象填充集合。

public interface MyInterface {
  int getANumber();
}

public class RandomNumberGenerator implements MyInterface {
  public int getANumber() {
    return 4; // choosen by a fair dice roll
  }
}

Collection<MyInterface> collection = new ArrayList<MyInterface>();
collection.add(new RandomNumberGenerator());

提示:如果您需要随机数生成器,请不要复制代码。

于 2013-02-21T20:48:00.917 回答
1

这样的集合可以填充其类实现该接口的任何对象。对象可以是不同的类(甚至是匿名类),只要这些类实现了该接口。

class ConcreteMyLinks implements MyLinks...
class ConcreteMyLinks2 implements MyLinks...

ConcreteMyLinks obj = new ConcreteMyLinks();
ConcreteMyLinks2 obj2 = new ConcreteMyLinks2();
collection.add(obj);
collection.add(obj2);
collection.add(new MyLinks() {  /* implement interface here */ });
于 2013-02-21T20:46:44.057 回答
1

您创建一个实现接口的类,并用它填充它。

于 2013-02-21T20:47:06.660 回答
0

试试这个伙伴:

    links = new ArrayList<MyLinks>();
    links.add(new MyLinks() { });

祝你好运!

于 2013-02-21T20:48:42.810 回答
0

上面的解决方案都是正确的,你也可以使用匿名类:

MyInterface object = new MyInterface() {
   //here override interfaces' methods
}
于 2013-02-21T20:51:47.653 回答
0
  1. 您可以创建实现该接口的具体类的实例并将其添加到集合中。

    collection.add(new MyConcreteLinks());
    
  2. 您可以创建匿名类实例,例如:

    collection.add(new MyLinks() { /*overide mylinks method*/});
    
于 2013-02-21T20:52:11.100 回答