我正在学习java泛型,并尝试改编一些作为练习而开发的代码。
特别是,我开发了一个 ArrayVisualizer
类,该类使用sedgewick的stddraw库来可视化和动画动态数组的行为。我有自己的动态数组类,它支持泛型,我正在尝试扩展 ArrayVisualizer
任何类似于这个数组的东西。
简而言之,我的问题是:如何处理包含其他泛型类型的泛型类型?
以下是我的思考过程:
我开始做这个界面:
public interface IterableCollection<Item> {
void add(Item i);
Item get(int index) throws IndexOutOfBoundsException; // These can be slow for LinkedList implementations
void set(int index, Item value) throws IndexOutOfBoundsException;
int capacity();
int size(); // Capacity and size can be the same for LinkedList implementations
}
那么,我想要我的 ArrayVisualizer
类将实现此接口的任何类作为参数。我在谷歌上搜索了一下,发现你不会写字
public class ArrayVisualizer<T implements IterableCollection<?> >
但你必须使用扩展。
然而,即使我写了,我也不能在我的函数中使用t类。
例如,如果我尝试泛化此函数,则会出现编译器错误:
public static void draw(T<String> vector) throws Exception
就像我必须指定t也是泛型的,但是我找不到方法来声明它。我试过以下方法,但没有一种有效:
public class ArrayVisualizer<T<?> implements IterableCollection<?> >
public class ArrayVisualizer<T<S> implements IterableCollection<S> >
参考资料:我上传了代码的非通用版本作为参考。
动态播放.java
arrayvisualizer.java(它将一些空格字符串作为输入)
interactivearrayvisualizer.java(这个不允许选择单元格的值,但是您可以通过单击下一个空位来填充它们,也可以通过单击最后一个打开的单元格来清空它们。这意味着要使用调试助手来解决动态数组的调整大小问题。
1条答案
按热度按时间nukf8bse1#
你的
ArrayVisualizer
类必须同时指定集合类型和元素类型。你不能过多地量化T<String>
就像在 java (其他语言可以做到,但java不行。)所以,有点像。。。。
(虽然如果我是你,我会尽量使用预建的
Iterable
或者Collection
界面而不是我自己的IterableCollection
接口…)