java toString() 从类返回 null [英] java toString() is returning null from class

查看:19
本文介绍了java toString() 从类返回 null的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是 Java,使用 BlueJ.

This is Java, using BlueJ.

我有四个类,分别是 Person、Letter、Address 和 PhoneNumber.在每个中,我覆盖了 toString() 方法以返回我想要从类中连接的值的字符串.调用 Letter toString() 时,它对所有值都返回 null.

I have four classes called Person, Letter, Address and PhoneNumber. In each, I override the toString() method to return a concatenated string of the values I want from the class. When calling the Letter toString(), it is returning null on all values.

想法是使用硬编码信息,将其传递到适当的类中,并以标准字母格式返回.

The idea is to use the hard coded information, pass it into the appropriate class, and return it in a standard letter format.

我是否朝着正确的方向打印硬编码信息,还是应该走不同的路线?这是一个家庭作业问题,但我觉得我碰到了砖墙.

Am I headed in the right direction for printing out the information hard coded, or should I go a different route? This is a homework problem, but I feel I have hit a brick wall.

以下是课程:

public class Person
{
private static String aPerson;
private String first;
private String middle;
private String last;    
private Address address;
private PhoneNumber phone;

public String getFirst()
{
    return this.first;
}

public void setFirst(String FirstName)
{
    this.first = FirstName;
}

    public String getMiddle()
{
    return this.middle;
}

public void setMiddle(String MiddleName)
{
    this.middle = MiddleName;
}

    public String getLast()
{
    return this.last;
}

public void setLast(String LastName)
{
    this.last = LastName;
}

public Address getMyAddress()
{
    return this.address;
}
public void setMyAddress(Address Address)
{
    this.address = Address;
}

public PhoneNumber getMyPhoneNum()
{
    return this.phone;
}

public void setMyPhoneNum(PhoneNumber Number)
{
    this.phone = Number;
}

public Person()
{
    aPerson = getFirst() + getMiddle() + getLast() + getMyAddress() + 
    getMyPhoneNum();
}

public String toString()
{
    return aPerson;
}
}

电话号码:

public class PhoneNumber
{
private String number;
private int areaCode = 0;
private int phonePrefix = 0;
private int phoneLineNum = 0;
private int phoneExtension = 0;

public String getNumber()
{
    return number;
}

public void setNumber(String Number)
{
    number = Number;
}

public int getAreaCode()
{
    return areaCode;
}

public void setAreaCode(int AreaCode)
{
    areaCode = AreaCode;
}

public int getPrefix()
{
    return phonePrefix;
}

public void setPrefix(int Prefix)
{
    phonePrefix = Prefix;
}

public int getPhoneLineNumber()
{
    return phoneLineNum;
}

public void setLineNum(int PhoneNumber)
{
    phoneLineNum = PhoneNumber;
}

public int getExtension()
{
    return phoneExtension;
}

public void setExtension(int Extension)
{
    phoneExtension = Extension;
}
}

地址:

public class Address
{
private String state;
private String anAddress;
private String address;
private String city;
private int zip = 0;

public String getState()
{
   return state;
}

public void setState(String State)
{
   state = State;
}

   public String getAddress()
{
   return address;
}

   public void setAddress(String Address)
{
   address = Address;
}

   public String getCity()
{
   return city;
}

   public void setCity(String City)
{
   city = City;
}

   public int getZip()
{
   return zip;
}

   public void setZip(int Zip)
{
   zip = Zip;
}

public Address()
{
   anAddress = getState() + getAddress() + getCity() + getZip();
}

public String toString()
{
   return this.anAddress;
}
}

字母:

public class Letter
{
private Person to;
private Person from;
private String body;
private String finishedLetter;

public Person getTo()
{
    return to;
}

public void setTo(Person newValue)
{
    to = newValue;
}

public Person getFrom()
{
    return from;
}

public void setFrom(Person newValue)
{
    from = newValue;
}

public String getBody()
{
    return body;
}

public void setBody(String newValue)
{
    body = newValue;
}

public Letter()
{
    finishedLetter = getTo() + " \n" + getFrom() + " \n" + getBody();
}

public String toString()
{
    return finishedLetter;
}
}

和主要:

public class MainClass
{
public static void main(String args[])
{
    PhoneNumber phone1 = new PhoneNumber();
    phone1.setAreaCode(417);
    phone1.setPrefix(447);
    phone1.setLineNum(7533);
    phone1.setExtension(0);

    PhoneNumber phone2 = new PhoneNumber();
    phone2.setAreaCode(210);
    phone2.setPrefix(336);
    phone2.setLineNum(4343);
    phone2.setExtension(9850);

    Address address1 = new Address();

    address1.setState("MO");
    address1.setAddress("1001 East Chestnut Expressway");
    address1.setCity("Springfield");
    address1.setZip(65807);

    Address address2 = new Address();

    address2.setState("TX");
    address2.setAddress("4800 Calhoun Road");
    address2.setCity("Houston");
    address2.setZip(77004);

    Person person1 = new Person();

    person1.setFirst("Shane");
    person1.setMiddle("Carroll");
    person1.setLast("May");
    person1.setMyAddress(address1);
    person1.setMyPhoneNum(phone1);

    Person person2 = new Person();

    person2.setFirst("Ted");
    person2.setMiddle("Anthony");
    person2.setLast("Nugent");
    person2.setMyAddress(address2);
    person2.setMyPhoneNum(phone2);

    Letter aLetter = new Letter();

    aLetter.setTo(person2);
    aLetter.setFrom(person1);
    aLetter.setBody("This is the body");

    System.out.println(aLetter.toString());
}
}

推荐答案

您的 Letter 构造函数正在调用诸如 getTo()getFrom() 之类的方法被填满.不要这样做,因为你的finishedLetter String 永远不会正确finished".即,

Your Letter constructor is calling methods such as getTo() and getFrom() before those fields have been filled. Don't do this since your finishedLetter String will never be correctly "finished". i.e.,

public Letter()
{
    finishedLetter = getTo() + " \n" + getFrom() + " \n" + getBody();
}

总是会导致 null + "\n" + null + "\n" + null

也许那种代码应该在 toString() 方法中.

Perhaps that sort of code should be in the toString() method instead.

这篇关于java toString() 从类返回 null的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆