我有一个我编写的程序,MyStack.java,我试图把它变成MyStackGeneric.java。我遇到了一些障碍。
我不知道如何:
或
我找到的资源建议将我的方法更改为泛型,但示例中使用的方法有参数,而我的程序中的方法不是通用的。
到目前为止,这是我的代码:
import java.util.ArrayList;
import java.util.Scanner;
import java.util.Iterator;
public abstract class MyStackGeneric extends ArrayList<Integer> {
public void print() {
Iterator s = this.iterator();
while (s.hasNext()) {
System.out.print(s.next() + ", ");
}
System.out.println("");
}
public Object peek() {
return this.get(getSize() - 1);
}
public Object pop() {
Object o = this.get(getSize() - 1);
this.remove(getSize() - 1);
return o;
}
public void push(Integer o) {
this.add(o);
}
public boolean empty() {
return this.isEmpty();
}
public int getSize() {
return this.size();
}
@Override
public String toString() {
return "stack: " + this.toString();
}
public void binaryOperator(char op) {
Integer var1;
Integer var2;
boolean exist = true;
if (op == '+') {
try {
var1 = (int) peek();
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("Exception: Need two operands");
var1 = 0;
exist = false;
}
if (exist)
pop();
try {
var2 = (int) peek();
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("Exception: Need two operands");
var2 = 0;
exist = false;
}
if (exist)
pop();
var2 += var1;
push(var2);
}
if (op == '-') {
try {
var1 = (int) peek();
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("Exception: Need two operands");
var1 = 0;
exist = false;
}
if (exist)
pop();
try {
var2 = (int) peek();
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("Exception: Need two operands");
var2 = 0;
exist = false;
}
if (exist)
pop();
var2 -= var1;
push(var2);
}
}
public void readInput(Scanner s) {
char c;
while (s.hasNext()) {
String[] strInput = s.next().split(" ");
for (String s2 : strInput) {
if (s2.matches("[+-]?\\d+")) {
push(Integer.parseInt(s2));
} else if (s2.matches("[+-]")) {
c = s2.charAt(0);
binaryOperator(c);
} else if (s2.matches("p")) {
print();
} else if (s2.length() > 1) {
System.out.println("Exception: too long: " + s2);
} else if (s2.length() == 1) {
System.out.println("Exception: Unknown Command " + s2);
}
}
}
}
public static void main(String[] args) {
MyStack my = new MyStack();
my.readInput(new Scanner(System.in));
}
}
答案 0 :(得分:1)
之前我还没有听说过Java中的友好方法。正如我从here发现的那样:
无法将方法标记为“友好”。但是根据您的需要,package-private就足够了。
要概括您的课程,您应该用Object
替换所有Integer
,T
提及,并按如下方式声明该课程:
public abstract class MyStackGeneric<T> { ... }
请注意,extends ArrayList<Integer>
使该类依赖于Integer
中的ArrayList
实现:
public abstract class MyStackGeneric<T> extends ArrayList<T> { ... }
顺便说一句,你最好不要忘记原始类型,不要使用它们:
Iterator<T> s = this.iterator();
^
答案 1 :(得分:1)
你应该做更多的事情&#34;学习&#34;关于您在源代码中使用的概念: