我第一次使用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
。为什么它会在这里返回不同的东西?
谢谢!
答案 0 :(得分:4)
完全没有问题,org.apache.commons.collections.set.UnmodifiableSet
实施java.util.Set
。
具有给定return语句的函数可以返回指定类的后代。否则,将无法使用接口和抽象类作为返回类型...
这是最好的OOP:)
答案 1 :(得分:2)
org.apache.commons.collections.set.UnmodifiableSet
实现java.util.Set
所以一切看起来都不错。方法必须返回隐藏在接口下的具体实现!