通过 toString 将用户定义的对象转换为字符串未显示正确的输出
-
13-12-2019 - |
题
我创建了一个类 CurrentDate
它以特定格式显示系统日期(例如2012 年 6 月 29 日)。该类看起来像:
package getset;
import java.util.*;
import getset.Getset;
public class CurrentDate{
public static void main(String[] args){
Calendar cal = new GregorianCalendar();
int month = cal.get(Calendar.MONTH);
int year = cal.get(Calendar.YEAR);
int day = cal.get(Calendar.DAY_OF_MONTH);
String toyear=String.valueOf(year);
String newyear=toyear.substring(2,4);
String newmonth=monthvalidation(month);
System.out.println("Current date : " + day + "-" + (newmonth) + "-" + newyear);
}
private static String monthvalidation(int initmonth) {
// TODO Auto-generated method stub
//int initmonth=i;
String finalmonth="";
if(initmonth==1)
{
finalmonth="JAN";
}
if(initmonth==2)
{
finalmonth="FEB";
}
if(initmonth==3)
{
finalmonth="MAR";
}
if(initmonth==4)
{
finalmonth="APR";
}
if(initmonth==5)
{
finalmonth="MAY";
}
if(initmonth==6)
{
finalmonth="JUN";
}
if(initmonth==7)
{
finalmonth="JUL";
}
if(initmonth==8)
{
finalmonth="AUG";
}
if(initmonth==9)
{
finalmonth="SEP";
}
if(initmonth==10)
{
finalmonth="OCT";
}
if(initmonth==11)
{
finalmonth="NOV";
}
if(initmonth==12)
{
finalmonth="DEC";
}
return finalmonth;
}
}
现在当我尝试使用它进行转换时 toString()
它没有显示预期的内容。我试过:
CurrentDate date=new CurrentDate();
String sysdate=date.toString();
System.out.println(""+sysdate);
它显示如下: getset.CurrentDate@18a178a
这不是人类可读的预期格式。我可以做什么来纠正这个问题?
解决方案
您需要覆盖 toString
方法。
在你的 CurrentDate
类,添加类似的东西
@Override
public String toString() {
String toyear=String.valueOf(year);
String newyear=toyear.substring(2,4);
String newmonth=monthvalidation(month);
return day + "-" + newmonth + "-" + newyear;
}
其他提示
你没有覆盖 Object
实施 toString()
为了测试你的方法,你可以快速将你已经开发的逻辑放入 public String toString()
方法。然后在你的 main
方法,创建一个 CurrentDate
并打印 toString
.
覆盖 toString
你的类中的方法。添加一个类似 a 的方法,如下所示。
@Override
public String toString() {
return day + "-" + newmonth + "-" + newyear;
}
我看到你的代码有问题。首先,您没有想要的字段 toString()
表示。我认为你需要声明如下字段:
int month;
int year ;
int day;
@Override
public String toString() {
return "CurrentDate [month=" + month + ", year=" + year + ", day="
+ day + "]";
}
如果您使用的是 Eclipse IDE,只需生成 toString()
方法,这将是解决您问题的简单方法。现在,反对 toString()
为您调用 toString()
. 。事实上,根据乔什·布洛赫的说法,
每个类都应该重写 toString() 以获取人类可读的格式。
CurrentDate date=new CurrentDate();
String sysdate=date.toString();
System.out.println(""+sysdate);
In your above code you are using date object but not assigning any value , only CurrentDate class reference. so your are getting 'getset.CurrentDate@18a178a' when use toString() method.
If you want to format date to string you have to use
public static final String DATE_FORMAT_NOW = "dd-MMM-yy";
SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_NOW);
不隶属于 StackOverflow