3

例如,我想模仿 String 对象的功能:

String mystring = new String ( "Hi there." );
System.out.println(mystring); // prints "Hi there." without calling any methods on String
                              // (that is what I want with my object)
System.out.println(mystring.toUpperCase()); // prints "HI THERE."

从此开始:

class MyObject
{
    private Int value ;

    public MyObject ( Int value )
    {
        this.value = value ;
    }
    public Int getValue ( )
    {
        return this.value ;
    }
    public Int multiplyBy ( Int multiplier )
    {
        return this.value * multiplier ;
    }
}

...如何(或我可以)做这样的事情:

MyObject myobject = new MyObject ( 6 ) ;
System.out.println( myobject ) ; // want to print myobject.value (6)
System.out.println( myobject.multiplyBy ( 2 ) ) ; // print 12

我对 Java 很陌生,并意识到我可能缺少一些基本概念,但任何反馈都将不胜感激。谢谢你。

编辑:关于覆盖 toString 方法的响应很有帮助,但它并没有完全按照我的想法做,这是我想要的一个更好的例子:

Double mydouble = new Double ( 20.1 ) ;
System.out.println ( mydouble + 10.1 ) ; // prints 30.2

我将如何使用我自己的对象执行此操作(假设我希望默认值为双精度)?

再次感谢。

最终编辑(希望如此):您的回答足以让我了解更多有关 Primitive Wrappers 和 Autounboxing 的信息。我的理解是没有办法做我想做的事(在这一点上,我将其描述为将我的对象自动拆箱为双重),或者至少我会将其保存到另一个问题。干杯。

4

4 回答 4

7

是的,你可以做到:你需要做的就是覆盖toString

public String toString() {
    return ""+this.value;
}

这是有效的,因为println调用toString正在打印的对象。

于 2013-01-20T20:51:41.587 回答
3

toString()method在您的MyObject 类中覆盖。

private int value ;
public String toString() {
  return Integer.toString(this.value);
 }
于 2013-01-20T20:53:10.867 回答
1

Java 总是首先执行“内部”语句。假设我们有一个 Double:

Double db = new Double(20.1);

然后你想这样做:

System.out.println(db + 10)

然后编译器将首先执行这部分db + 10,自动装箱/拆箱成为db.doubleValue() + 10评估为30.1. 然后用 评估外部函数 ( System.out.println(x)) x=30

当您有以下代码System.out.println(db + "hi")时,编译器会看到您正在向db字符串添加一些东西 () ,"hi"因此会调用.toString(). db然后将(字符串)添加到“hi”,这将为您提供最终字符串:"20.1hi"

希望这可以帮助您了解幕后发生的事情。

于 2013-01-20T22:12:09.630 回答
0

只需让实例方法返回一个新实例:

public MyObject multiplyBy(int multipler)
{
    return new MyObject(value * multipler);
}

(哦,那将是int,不是Int

并实现 .toString():

@Override
public String toString()
{
    return Integer.toString(value);
}
于 2013-01-20T20:52:15.903 回答