第一次使用Apache Commons时,HashBag.uniqueSet()返回错误的对象类型?

时间:2012-10-14 20:34:27

标签: java apache-commons

我第一次使用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,这是不期望的。根据文档HEREuniqueSet()方法继承自超类和接口,但在这两种情况下,该方法都应返回java.util.Set。为什么它会在这里返回不同的东西?

谢谢!

2 个答案:

答案 0 :(得分:4)

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

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

这是最好的OOP:)

答案 1 :(得分:2)

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