我在使用Python一年后回到Java,所以我试图记住一些涉及的语法/设计技术。在这样做的过程中,我将返回并实现我之前课程中的每个项目,仅限于Java ...但我已经停留在实现一个简单的Stack上了。这是因为当我不知道我正在返回什么类型的对象时,即在pop()方法中,我不确定如何编写方法签名。 insert()方法也存在同样的问题,因为我不知道作为参数传递了什么类型的对象。在Python中,没有必要在方法签名中明确声明对象类型,因此这让我感到困惑。
我是否必须为每种可能的参数/返回值类型编写单独的方法,或者是否有解决此问题的方法?
答案 0 :(得分:6)
你可以这样写:
public interface Stack
{
void push(Object o);
Object pop();
}
或者您可以使用泛型:
public interface Stack<T>
{
void push(T o);
T pop();
}
如果你的目的不是自己编写,你可以使用Java内置的那个:
答案 1 :(得分:2)
public Object pop();
。
Object是每个类继承的基类。
尽管如此,虽然这种签名有其优点,但在许多情况下,更好的方法是类型安全的东西,即popInt(),popString()等 - 毕竟,调用代码需要强制转换对象是什么东西,更糟糕的是,它需要根据通常使用多态性做得更好的事情来决定将它投射到什么位置。
我不知道您的设置,因此Object pop()
可能就是您的门票。
编辑:或者使用泛型,如duffymo专业演示。
答案 2 :(得分:1)
Java支持泛型,并允许您参数化要存储的类型。所以在你的情况下它会是这样的。详细了解here
public class Stack<T>
{
List<T> items=new ArrayList<T>();
public T push(T item) {...}
public T pop() {...}
}