我在接口中定义了以下方法
public interface Stack<T> {
void method1(T element);
T method2();
}
类实现这个接口实现这些方法如下
private List<T> elements;
@Override
public void method1(T element) {
elements.add(element);
}
@Override
public T method2() {
return elements.remove(elements.size() - 1);
}
这样一来,我得到了方法1的以下错误:方法不会覆盖超类中的方法,而方法2工作正常。
知道我做错了什么吗?
这非常好用:
import java.util.ArrayList;
import java.util.List;
public class Main {
interface MyStack<T> {
void push(T item);
T pop();
}
static class MyStackImpl<T> implements MyStack<T> {
private List<T> items = new ArrayList<T>();
@Override
public void push(T item) {
items.add(item);
}
@Override
public T pop() {
return items.remove(items.size() - 1);
}
}
public static void main(String[] args) {
MyStack<Integer> stack = new MyStackImpl<Integer>();
stack.push(42);
System.out.println(stack.pop());
}
}
您需要将类型参数添加到接口和类中:
public interface Stack<T> { // here it is: <T>
void method1(T element);
T method2();
}
public class Impl<T> implements Stack<T> { // and here too
private List<T> elements;
@Override
public void method1(T element) {
elements.add(element);
}
@Override
public T method2() {
return elements.remove(elements.size() - 1);
}
}
您只需要指定接口的泛型类型interface Stack<T>
。
public interface Stack<T> {
void method1(T element);
T method2();
}
您还需要在实现class YourStack<T>
时定义泛型类型
class YourStack<T> implements Stack<T>{
private List<T> elements;
@Override
public void method1(T element) {
elements.add(element);
}
@Override
public T method2() {
return elements.remove(elements.size() - 1);
}
}