Java Top.

使用Spring 5和Spring Boot 2开始,通过学习春天课程:

>>查看课程

1.概述

Java中的每个课程都是一个孩子目的直接或间接课程。自从此以来目的类包含一个toString ()方法,我们可以打电话toString ()在任何实例上并获得其字符串表示。

在本教程中,我们将看看默认的行为toString ()并学习如何改变其行为。

2.默认的行为

每当我们打印对象引用时,它会调用toString ()方法内部。如果我们不定义atoString ()我们班上的方法,然后目的#toString ()被调用。

对象的toString ()方法非常通用:

公共字符串toString(){return getClass()。getName()+“@”+ integer.tohexstring(hashcode());}

要查看其工作原理,让我们创建一个顾客我们在整个教程中使用的对象:

公共类客户{私有字符串名字;私有字符串LastName;//标准的getters和setter。没有ToString()实施}

现在,如果我们试图打印我们的Customer对象,目的toString ()将被调用,其输出类似于:

[电子邮件受保护]

3.覆盖默认行为

看上面的输出,我们可以看到它不会向我们提供有关我们的内容的许多信息金宝搏官网188be顾客对象。通常,我们对对象的hashcode不感兴趣,而是对对象属性的内容感兴趣。

通过覆盖默认行为toString ()方法,我们可以使方法调用的输出更有意义。

现在,让我们来看看一些不同的场景,使用对象看看我们如何覆盖这种默认行为。

4.原始类型和

我们的顾客对象都有两者细绳和原始属性。我们需要覆盖toString ()实现更有意义的输出的方法:

public class CustomerPrimitiveToString extends Customer {private long balance;@Override public String toString() {return "Customer [balance=" + balance + ", getFirstName()=" + getFirstName() + ", getLastName()=" + getLastName() + "]";}}

让我们看看我们打电话的时候我们得到了什么toString ()现在:

@Test public void givenPrimitive_whenToString_thenCustomerDetails() {CustomerPrimitiveToString customer = new CustomerPrimitiveToString();customer.setFirstName (Rajesh);customer.setLastName(“Bhojwani”);customer.setBalance (110);assertEquals("Customer [balance=110, getFirstName()=Rajesh, getLastName()=Bhojwani]", Customer . tostring ());}

5.复杂的Java对象

让我们现在考虑一下我们的情景顾客对象还包含一个命令属性是类型的秩序。我们的订单班两个都有细绳和原始数据类型字段。

所以,让我们覆盖toString ()再次:

public class CustomerComplexObjectToString extends Customer {private Order Order;//标准的setter和getter @Override public String toString() {return "Customer [order=" + order + ", getFirstName()=" + getFirstName() + ", getLastName()=" + getLastName() + "]";}}

命令是一个复杂的对象如果我们只是打印我们的顾客对象,不覆盖toString ()在我们的方法订单班级,它会打印命令作为[电子邮件受保护]

解决让我们覆盖toString ()订单:

公共班级{私有字符串OrderID;私人弦号;私人长价;私有字符串状态;@override public string toString(){return“命令[OrderID =”+ OrderID +“,desc =”+ desc +“,value =”+值+“]”;}}

现在,让我们看看当我们打电话时会发生什么toString ()方法在我们的顾客包含一个的对象命令属性:

@Test public void givenComplex_whenToString_thenCustomerDetails() {CustomerComplexObjectToString customer = new CustomerComplexObjectToString();/ / . .set customer as before Order Order = new Order();order.setOrderId(“A1111”);order.setDesc(“游戏”);order.setStatus(“In-Shiping”);customer.setOrders(秩序);assertEquals("Customer [order= order [orderId=A1111, desc=Game, value=0], " + "getFirstName()=Rajesh, getLastName()=Bhojwani]", Customer . tostring ());}

6.对象数组

接下来,让我们改变我们的顾客有一系列订单S.如果我们只是打印我们的顾客对象,没有特别的处理命令对象,它将打印命令作为订购; @ <散码>

修复让我们使用Arrays.toString ()命令场地:

公共类CustomerArrayToString扩展了客户{私人订单[]订单;@override public string toString(){return“客户[ORDERS =”+ arrays.TOSTRING(ORDERS)+“,getFirstName()=”+ getFirstname()+“,getLastName()=”+ getLastName()+“]”;}}

让我们看看上面的结果toString ()方法:

@test public void给array_whentostring_thencustomerdetails(){customerarraytostring customer = new customerarraytostring();// ..将客户设置为以前// ..设置订单,如Customer.Setorders(新订单[] {ORDER});assertequals(“客户[ORDERS = [ORDER [ORDERID = A1111,DESC = GAME,VALUE = 0]],”+“GETFIRSTNAME()= RAJESH,GETLASTNAME()= BHOJWANI]”,Customer.TOSTRING());}

7.包装,集合和stringBuffers.

当一个物体完全弥补包装收藏品, 或者stringBuffer.S.,没有习俗toString ()需要实现,因为这些对象已经覆盖了toString ()有意义的方法:

公共类CustomerWrappercollectionTostring扩展了客户{私有整数分数;// Wrapper类对象私有列表订单;// Collection对象私有StringBuffer FullName;// stringbuffer对象@override public string toString(){return“客户[score =”+ score +“,Orders =”+ orders +“,fullname =”+ fullname +“,getfirstname()=”+ getfirstname()+“,getLastName()=”+ getLastName()+“]”;}}

让我们再次看看呼叫的结果toString ()

@Test public void givenWrapperCollectionStrBuffer_whenToString_thenCustomerDetails() {CustomerWrapperCollectionToString customer = new CustomerWrapperCollectionToString();/ / . .// ..像客户之前一样建立订单。S.etOrders(new Order[] { order }); StringBuffer fullname = new StringBuffer(); fullname.append(customer.getLastName()+ ", " + customer.getFirstName()); assertEquals("Customer [score=8, orders=[Book, Pen], fullname=Bhojwani, Rajesh, getFirstName()=Rajesh, " + "getLastName()=Bhojwani]", customer.toString()); }

结论

在本文中,我们看着自己的实现toString ()方法。

本文的所有源代码可用在github上

Java底部

使用Spring 5和Spring Boot 2开始,通过学习春天课程:

>>查看课程
4.评论
最老的
最新
内联反馈
查看所有评论
评论在本文上关闭!