Java自定义Stack类报type Stack does not take parameters错误
代码问题全量排查
触发当前报错的核心原因
你在代码顶层自定义了一个名为Stack的空类,这个类是没有声明任何泛型形参的普通类,根本不支持接收类型参数。
因为这个类的名字和JDK内置的java.util.Stack完全重名,编译器在解析Stack<Integer>的写法时,会优先匹配你自己定义的这个同名类。但这个自定义类没有泛型能力,因此直接抛出type Stack does not take parameters的错误。
其余会导致程序运行失败的隐藏问题
就算解决了泛型匹配的报错,当前代码还有两个会直接导致程序异常的硬伤:
- 自定义的空
Stack类完全没有实现push()、pop()、isEmpty()方法,就算把所有泛型参数的写法删掉,编译时也会提示找不到对应方法。 - 循环语句后手滑多写了分号:
while (!stack.isEmpty());这个多余的分号会让while循环变成没有实际执行逻辑的空语句,程序会直接在这里进入死循环,后续弹栈、拼接结果的代码根本不会被纳入循环体执行。
修正方案
任选一种即可:
- 直接删掉你写的空
Stack类,在类定义前导入JDK内置的栈实现:import java.util.Stack;。此时你调用的就是原生支持泛型的官方栈类,泛型匹配的报错会直接消失。 - 如果你确实要手写栈的实现逻辑,就需要给自定义的Stack类加上泛型声明,补全对应的栈操作方法,比如改成
class Stack<T> { // 内部实现push/pop/isEmpty的具体逻辑 },改造后的类才支持传入Integer这类类型参数。
*注意:不管选哪种修正方案,都必须删掉while (!stack.isEmpty()); 后面的多余分号,否则程序依然会卡死在空循环里。
内容的提问来源于stack exchange,提问作者tanjiro nezuko
相关产品推荐
相关产品推荐

