2014-08-29 102 views
2

我需要知道如何从对象中获取值。 例如:如何从对象中获取值

public ConfirmDialog(String quest) { 
    int a = JOptionPane.showConfirmDialog(null, 
      quest, 
      "Confirmation", 
      JOptionPane.YES_NO_OPTION, 
      JOptionPane.QUESTION_MESSAGE); 
} 

当我回到这个对象,我没有得到整数。有人可以给我一个解释吗?谷歌没有帮我..

Object b = new ConfirmDialog("Question?"); 
     System.out.println(b); 
+1

你是什么意思,你没有得到Integer?你的意思是'a'在你使用'System.out.println(b);'时没有被打印出来? – qbit 2014-08-29 17:59:56

+0

是的,这是我的输出:ConfimDialog @ afe1bc5 – coo12 2014-08-29 18:02:35

+0

没有return语句。你做了一个'a'但没有做任何事情。 – csmckelvey 2014-08-29 18:11:22

回答

2

您正在尝试打印Object而不是int a。当您传递一个对象System.out.println()时,您默认呼叫.toString()方法,该方法尝试给出对象的文本表示形式。你得到的背面是Object-Type@HexValue of the object hashcode hense的[email protected]

现在,你知道你需要呼吁int,为什么你让这件事印刷,还有第二个问题。您在构造函数中创建并初始化变量int a,这意味着您不能在其他任何地方使用它。你所要做的就是外面创建它每一次初始化您调用构造函数,像这样的:System.out.println(new ConfirmDialog("Question?").a);

需要注意的是::如果你实例ConfirmDialog()

int a; 
public ConfirmDialog(String quest) { 
    int a = JOptionPane.showConfirmDialog(null, 
      quest, 
      "Confirmation", 
      JOptionPane.YES_NO_OPTION, 
      JOptionPane.QUESTION_MESSAGE); 
} 

现在你可以使用它打印像这样:

Object b = new ConfirmDialog("Question?");

,那么你需要以投bConfirmDialog到ACCE SS a,像这样:

System.out.println(((ConfirmDialog)b).get());

或者你可以做这样的:

ConfirmDialog b = new ConfirmDialog("Question?");并调用System.out.println(b.a);

但是总的来说,你应该有你的私有变量的访问和使用getter方法。例如:

private int a; 
public ConfirmDialog(String quest) { 
    int a = JOptionPane.showConfirmDialog(null, 
      quest, 
      "Confirmation", 
      JOptionPane.YES_NO_OPTION, 
      JOptionPane.QUESTION_MESSAGE); 
} 

public int getA(){ 
    return a; 
} 

现在如果你想访问a你可以这样做:
System.out.println(new ConfirmDialog("Question?").getA());

希望这有助于。

+0

非常有帮助,非常感谢这篇文章! – coo12 2014-08-29 18:37:36

1

你正在初始化一个构造函数内的局部变量。构造函数用于创建对象,并且它们不具有返回类型。试试下面的代码: -

int a; 
public ConfirmDialog(String quest) { 
    a = JOptionPane.showConfirmDialog(null, 
      quest, 
      "Confirmation", 
      JOptionPane.YES_NO_OPTION, 
      JOptionPane.QUESTION_MESSAGE); 
} 

public int get() { 
    return a; 
} 

Object b = new ConfirmDialog("Question?"); 
System.out.println(((ConfirmDialog)b).get()); 
+3

因为'b'的类型是'Object','get'是不可访问的。 'b'需要声明为'ConfirmDialog'类型,以使'get'变得可访问 - 否则'b.get'将失败。 – Zyerah 2014-08-29 18:02:32

+0

@Emrakul更正了它 – 2014-08-29 18:05:07

+0

谢谢,现在我明白了! – coo12 2014-08-29 18:07:36

1

试试这个

int a; 

public ConfirmDialog(String quest) { 
    a = JOptionPane.showConfirmDialog(null, 
      quest, 
      "Confirmation", 
      JOptionPane.YES_NO_OPTION, 
      JOptionPane.QUESTION_MESSAGE); 

} 

则:

ConfirmDialog b = new ConfirmDialog("Question?"); 
System.out.println(b.a); 

More information

附:仅用于演示..原因...代码令人毛骨悚然.. :)

+1

由于'b'属于'Object'类型,'a'是不可访问的。 'b'需要被声明为'ConfirmDialog'类型,以使'a'变得可访问 - 否则'b.a'将失败。 – Zyerah 2014-08-29 18:02:15

+0

true .. thx ..我纠正了我的答案.. – 2014-08-29 18:04:52