gab*_*eio -1 java binary-tree arraylist
当我运行以下代码时:
class zTree<T>
{
ArrayList<ArrayList<T>> table = new ArrayList<ArrayList<T>>();
int height = 0;
<T> void zTree(BinaryTree<T> tree)
{
recIt((BinaryTree<T>)tree, 1);
}
void recIt(BinaryTree<T> tree, int fromRoot)
{
if(!(tree.isEmpty()))
{
ArrayList<T> tempList = (ArrayList<T>)table.get(fromRoot);
tempList.add((T)tree.getData()); // add data to table
recIt(tree.left,fromRoot+1); // recursive left,
recIt(tree.right,fromRoot+1); // right
}
else
{
height = fromRoot-1;
}
}
}
Run Code Online (Sandbox Code Playgroud)
Javac返回此错误.
zTree.java:15: recIt(structures.tree.BinaryTree<T>,int) in zTree<T> cannot be applied to (structures.tree.BinaryTree<T>,int)
recIt((BinaryTree<T>)tree, 1);
^
1 error
Run Code Online (Sandbox Code Playgroud)
我不关心他的代码效率.我想知道出了什么问题,但javac显然没有多少帮助,因为它告诉我(x,y)不能应用于(x,y)......但为什么呢?
问题是,T
在zTree
方法(这奇怪的是具有相同的名称作为其外部类-不这样做)是不一样T
的zTree
类,因为该方法是通用的:
<T> void zTree(BinaryTree<T> tree)
Run Code Online (Sandbox Code Playgroud)
如果你使它不是通用的,它应该没问题,因为现在方法中的T
类型参数将与T
你正在调用的方法中的类型参数相同.
void zTree(BinaryTree<T> tree)
Run Code Online (Sandbox Code Playgroud)
我强烈建议使用开始遵循Java命名约定,并且绝对不要创建任何与声明它们的类同名的方法.
如果该方法是意味着是一个构造函数,你应该摆脱的返回类型:
zTree(BinaryTree<T> tree)
Run Code Online (Sandbox Code Playgroud)
(并且仍然修复了类名.)
归档时间: |
|
查看次数: |
206 次 |
最近记录: |