课堂测试 泛型类—Bag
目录
一、题目要求
- 题目:泛型类-Bag
二、设计思路
自定义一个
Bag
类,实现BagInterface
中的方法。Bag类应该是一个可以存放东西的包,且存放的类型可以自定义,即使用泛型。先在Bag中声明一个名为bag的List<T>
,在构造方法中将其实例化。接下来实现方法。每个需要实现的方法可以用bag调用ArrayList
中的方法来实现。
三、问题和解决办法
-
问题:无法直接用
ArrayList
中的toArray()
方法来实现Bag
中的toArray()
方法 -
分析过程及解决办法:
ArrayList
中有两个toArray()
方法,没有参数,返回一个Object类型的数组,但我们需要返回一个T类型数组,如果强制转型,会抛出异常,无法强制转型;第二个方法,返回一个T类型的数组,但需要传入一个T类型的数组作为参数。于是我给接口中的toArray()
方法加了个参数。那么在实际使用的时候,先声明一个相应类型的大小为1的数组,然后调用toArray()
方法时传进去,就能把Bag中的元素转化到数组中。 -
接口中的方法:
- 实现的方法:
- 在TestBag中的应用:
四、代码运行截图
- Bag的测试类运行截图:
Books
类为自定义的类。
- 单元测试运行截图:
- getCurrentSize()方法
- isEmpty()方法
- add(T newEntry)方法
- remove()方法
- remove (T anEntry)方法
- clear()方法
- getFrequencyOf(T anEntry)方法
这个方法出了点问题,单元测试的时候即使是正确结果也显示的是红条,但是在测试类中调用这个方法得出来的结果却没有问题,目前还不知道是什么原因,还没有解决。 - contains(T anEntry)方法
- toArray(T[] a)方法
返回目录
五、代码托管地址
六、总结
这次的测试,主要是考察泛型的运用。我感觉我写的代码只是借用了List
这个已经写好的泛型类,没有什么自己创新的算法。。。 以我目前的水平感觉也写不出来不过我下载了Java API的源代码,在我自己写Bag类的时候,也看了一下ArrayList中的那些方法是怎么实现的,可是感觉就一个字——晕!有一个稍微看起来简单的方法toArray()
但是这里又涉及到copyOf这个方法,我又去找这个方法的源代码,然后这个方法又要用到其他方法。。。感觉真的是一环扣一环。最后我只好放弃。所以最后我总结出,以我现在的水平,好像也只能看看源代码,然后再直接调用其中的方法来编写我的Bag类了。不过虽然现在做不到,但是多看看还是有用的,说不定哪天就能受到启发呢。