【问题标题】:Default Get method in custom java class自定义 java 类中的默认 Get 方法
【发布时间】:2013-03-06 20:26:05
【问题描述】:

这里是java n00b。

我有一个这样定义的自定义数据类型:

public class MyData{
    int value;
    int type;
    String name;

    public MyData(int newValue, int newType, string newName)
    {
        value = newValue;
        type  = newType;
        name  = newName;
    }
}

当我调用此类的一个实例时,我希望它评估为 value 属性,如下所示:

myData dataInstance = new myData(100,3,"customData");
System.out.println(dataInstance); // should print "100"

这可以实现吗?

【问题讨论】:

  • 是的,使用 toString 方法。类级字段通常也应声明为私有(例如私有 int 值;)
  • 修复您的 sytnax 错误(String 而不是 string),遵循 Java 命名约定(MyData 而不是 myData)并覆盖 toString() 方法。然后就可以实现了。
  • @jlordo 请原谅我的无知,我通常从不使用 Java 编码

标签: java getter-setter


【解决方案1】:

当您将 System.out.println 与对象一起使用时,它将调用 toString() 方法 - 所以您只需覆盖它:

@Override public String toString() {
    return String.valueOf(value);
}

另外请注意,您应该更具体地使用您的术语。当你写的时候:

当我调用这个类的一个实例时

...这并不意味着什么。你不调用一个实例——你调用一个方法on一个实例。在这种情况下,方法是toString

【讨论】:

  • 那么,我不能只引用实例,然后让“catch-all”方法以这种方式执行吗?覆盖toString() 似乎是一个很好的解决方案,但我正在寻找的是,不必显式调用实例上的方法。
  • @MathiasR.Jessen:正如 Jon 解释的那样,如果你覆盖 toString(),你不必显式调用它,它会由 System.out.println(dataInstance); 自动完成
  • 感谢这个方法,为了更清楚,只需在你的自定义类中添加这个覆盖方法。
猜你喜欢
  • 2011-06-10
  • 2011-04-12
  • 2013-12-12
  • 1970-01-01
  • 1970-01-01
  • 2012-01-07
  • 1970-01-01
  • 1970-01-01
  • 2021-02-23
相关资源
最近更新 更多