1

我第一次使用 Apache Commons,主要是因为我想访问他们的 HashBag 类。我将概述我所遵循的整个过程,以帮助查明问题。

首先,我下载了 Apache Commons Collections 的当前版本 (3.2.1)。 http://commons.apache.org/collections/download_collections.cgi

然后我将文件解压缩commons-collections-3.2.1.jar到磁盘上的一个文件夹中,并将该文件夹添加到我的系统%CLASSPATH%环境变量中,以便我可以将类导入到我的 Java 程序中。

这个测试程序说明了我遇到的问题。

import org.apache.commons.collections.bag.HashBag;

public class test {
    public static void main(String[] args) {
        HashBag test = new HashBag();
        System.out.println(test.getClass().getName());
        System.out.println(test.uniqueSet().getClass().getName());
    }
}

第一个输出行说明org.apache.commons.collections.bag.HashBag这是预期的。

第二个输出行说明org.apache.commons.collections.set.UnmodifiableSet了这不是预期的。根据文档HERE,该uniqueSet()方法继承自超类和接口,但在这两种情况下,该方法都应该返回一个java.util.Set. 为什么它在这里返回不同的东西?

谢谢!

4

2 回答 2

4

完全没有问题,org.apache.commons.collections.set.UnmodifiableSet执行java.util.Set

具有给定 return 语句的函数可以返回指定类的后代。否则,将无法使用接口和抽象类作为返回类型......

这是最好的 OOP :)

于 2012-10-14T20:37:00.560 回答
2

org.apache.commons.collections.set.UnmodifiableSet实现java.util.Set所以一切看起来都很好。方法必须返回隐藏在接口下的具体实现!

于 2012-10-14T20:37:04.757 回答