如果没有调用方法,我可以让对象返回默认值吗?

时间:2013-01-20 20:50:09

标签: java

举个例子,我想模仿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

我如何使用自己的对象(假设我希望默认值为double)?

再次感谢。

最终编辑(希望): 您的回答足以让我了解更多有关原始包装和Autounboxing的信息。我的理解是没有办法做我想做的事情(在这一点上,我将其描述为自动将我的对象称为双重),或者至少我会将其保存为另一个问题。欢呼声。

4 个答案:

答案 0 :(得分:7)

是的,您可以这样做:您需要做的就是覆盖toString

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

这可行,因为println会在正在打印的对象上调用toString

答案 1 :(得分:3)

MyObject类中覆盖toString()method

private int value ;
public String toString() {
  return Integer.toString(this.value);
 }

答案 2 :(得分: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)评估outter函数(x=30)。

当您拥有以下代码System.out.println(db + "hi")时,编译器会发现您正在向字符串db添加内容("hi"),因此会在.toString()上调用db }。然后将(字符串)添加到“hi”,它将为您提供最终字符串:"20.1hi"

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

答案 3 :(得分:0)

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

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

(哦,那将是int,而不是Int

并实现.toString():

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