我正在尝试构建一个显示属性列表的应用程序,并允许用户添加属性,删除属性或更新属性。
粗体字是我认为应该是Classes的东西。
属性有地址和 ViewingArrangement 。
地址包含streetNumber,streetName,suburb和postalCode
ViewingArrangement 有一个 ContactPerson 和一个openTime。
ContactPerson 有一个名称,officeLocation和phoneNumber
我的问题是,我不知道如何创建一个由另一个类的对象组成的类
例如。 ViewingArrangement 有一个openTime, ContactPerson 是一个类。
如何创建 ViewingArrangement 类?我如何做getter-setters,构造函数等?我一直在尝试和改变我的程序,我仍然不能完全正确。我是新来的,请帮忙!
package PropertyListing.data;
public class ContactPerson {
String cpName;
String office;
String pNo;
public ContactPerson(String name, String off, String pno)
{
String cpName = name;
String office = off;
String pNo = pno;
}
public void setCpName(String cpName)
{
this.cpName = cpName;
}
public String getCpName()
{
return cpName;
}
public String getOffice()
{
return office;
}
public void setOffice(String office)
{
this.office = office;
}
public String getPno()
{
return pNo;
}
public void setPno(String pno)
{
this.pNo = pno;
}
}
以下是我的ViewingArrangement类..请帮助:(
package PropertyListing.data;
public class ViewingArrangement {
String availTime;
private ContactPerson cp;
public ViewingArrangement (String availT, ContactPerson p)
{
this.availTime = availT;
}
public String getVAtime ()
{
return availTime;
}
public void setVAtime(String availTime)
{
this.availTime = availTime;
}
public ContactPerson getCP()
{
return cp;
}
public void setCP(ContactPerson cp)
{
this.cp = cp;
}
以上就是我经过一整天的乱七八糟,谷歌搜索和改变之后的结果,请放轻松对待我。
我希望一旦我解决了这个问题,我就可以正确地存储我的属性,我的JList(我将setModel设置为DefaultListModel)会很好地显示Property,而不是显示“PropertyListing.data.Property@55f716”等内容。
我真的希望这是上面提到的问题,导致这种不良的存储/显示......
答案 0 :(得分:0)
除了没有制作对象的字段private
之外,你实际上做得非常正确。那么为什么它不能“正确显示”呢?
您可能正在使用Strings
或某些GUI的System.out
方法显示自定义对象,例如setText
。这样可以正常工作,但是你没有告诉你的JVM如何打印你的对象!
默认情况下,执行上述某种情况时,会调用对象的toString
方法。此方法继承自Object
,默认情况下会打印有关该对象的一些内存数据。 String
通过返回它存储的字符来覆盖它。
您的自定义对象需要覆盖toString
才能正常显示。以下是ViewingArrangement
的示例,您可以根据自己的喜好进行调整:
@Override
public String toString() {
return "Viewing Arrangement: availTime - "+availtime+", Contact Person - "+cp;
}
当您的ContactPerson
类有自己的覆盖toString
方法时,上述方法会自动调用toString
,因为cp
被添加到String
!
toString
不应该过分依赖。您可以考虑使用一个实用程序类来单独格式化“最高”类的每个值(在您的情况下,它将是Property
),返回可读的String
。
答案 1 :(得分:0)
你需要做的是创建一个包含其他Property类的Property类,它听起来就像你可以使用的那样称为Map。
您可以改为创建一个包含“自身”的对象,而不是尝试创建包含各种不同实例数据的对象,这样您就可以在属性字段中放置任何内容,并且仍然可以轻松访问您的数据。 Tree对此实现很有帮助,因为您可以保存由更多属性和单个属性字段组成的属性。
import java.util.*;
public class Property {
private Map<String, Property> properties;
private String data;
public Property() {
properties = new ArrayList<HashMap>();
data = null;
}
public void setData(String propertyName, String newData) {
// if we can find another field to put this in, do so. Else, store it in this property.
if (!properties.containsKey(propertyName)
properties.get(propertyName).setData(newData);
else
data = newData;
}
public String getData(String key) {
properties.get(key).getData();
}
}
使用它,您可以有效地(并递归地!)创建一个属性树,您可以使用它来存储和引用它。可以修改这样的类以适应您需要存储的任何其他类。希望这有帮助!