Java中Stack存自定义pair类后,如何用peek()访问element属性?
如何访问Stack中自定义Pair类的element属性
你看到的Example$pair@4617c264是对象的默认toString()输出——Java中所有类默认继承Object类,而Object的toString()就是返回类名@哈希值的格式,所以直接打印Stack.peek()的结果才会显示这个内容。要访问element属性,有几种可行做法:
直接访问public属性
你的pair类里element是public修饰的,可以直接通过peek()获取对象后点出属性:
public static void main(String[] args) { Stack<pair> st= new Stack<pair>(); pair p1 = new pair(100,2); st.push(p1); // 直接访问element属性 System.out.println(st.peek().element); // 输出100 }
用getter方法(更规范的封装方式)
虽然public属性可以直接用,但Java开发更推荐把属性设为私有,通过getter方法访问,这样能保证封装性。修改你的pair类:
public static class pair{ private int element; // 改为私有 private int idx; public pair(int element, int idx){ this.element = element; this.idx = idx; } // 添加element的getter方法 public int getElement() { return this.element; } // 可选:添加idx的getter public int getIdx() { return this.idx; } }
之后访问的时候用:
System.out.println(st.peek().getElement()); // 输出100
额外:让打印对象时显示属性内容
如果想直接打印peek()的结果就能看到element和idx的值,给pair类重写toString()方法:
public static class pair{ int element; int idx; public pair(int element, int idx){ this.element = element; this.idx = idx; } @Override public String toString() { return "pair{element=" + element + ", idx=" + idx + "}"; } }
这时执行System.out.println(st.peek());就会输出pair{element=100, idx=2},而不是对象地址。
内容的提问来源于stack exchange,提问作者CShekhar
相关产品推荐
相关产品推荐

