这是我之前参加的工作面试测试中的一个问题。我不知道为什么有人会想要这样做,或者是否有可能,但有人会如何填充这个集合?
Collection<MyLinks> links = null; //Populate this variable
public interface MyLinks() {
//Method headers only
}
如果无法实例化 MyLinks 对象,如何填充此集合?这是一个技巧问题吗?
这是我之前参加的工作面试测试中的一个问题。我不知道为什么有人会想要这样做,或者是否有可能,但有人会如何填充这个集合?
Collection<MyLinks> links = null; //Populate this variable
public interface MyLinks() {
//Method headers only
}
如果无法实例化 MyLinks 对象,如何填充此集合?这是一个技巧问题吗?
用实现接口的对象填充集合。
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());
提示:如果您需要随机数生成器,请不要复制代码。
这样的集合可以填充其类实现该接口的任何对象。对象可以是不同的类(甚至是匿名类),只要这些类实现了该接口。
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 */ });
您创建一个实现接口的类,并用它填充它。
试试这个伙伴:
links = new ArrayList<MyLinks>();
links.add(new MyLinks() { });
祝你好运!
上面的解决方案都是正确的,你也可以使用匿名类:
MyInterface object = new MyInterface() {
//here override interfaces' methods
}
您可以创建实现该接口的具体类的实例并将其添加到集合中。
collection.add(new MyConcreteLinks());
您可以创建匿名类实例,例如:
collection.add(new MyLinks() { /*overide mylinks method*/});