我刚刚开始学习Java,我很难找到实现以下内容的正确方法。
我有一个名为State的类。该类有一个名为stateCaptial的字段。
我创建了一个State对象。
然后我想创建链接到一个State对象的许多Town对象。如果我查询该城市的州首府,它应该从州对象获取它。我认为它将被归类为一对多的对象关系?
实施此类解决方案的Java术语是什么?
非常感谢 安迪
答案 0 :(得分:1)
这将是一对多的关系。
执行此操作的最佳方法是让每个Town对象都有一个状态字段,该字段引用它所属的State。然后,Town的getStateCapital方法将从状态获取stateCapital并返回该状态。
您可能还希望在State对象上拥有一个数组或List of Town对象,以便列出州内的所有城镇。
答案 1 :(得分:1)
您所描述的是您希望Town对象依赖于State对象。将依赖对象插入Town类的行为通常称为依赖注入或DI。
您将拥有与此类似的类结构
public class Town
{
private State _state;
public Town(State state)
{
_state = state;
}
public string StateCapital()
{
return _state.Capital;
}
}
答案 2 :(得分:1)
您也可以创建一个Town
课程。因此,州有一个叫做Town类型资本的领域。州也有一套“城镇”,以便所有城镇都可以找到一个州。城镇有州的州。像下面的东西。
州级:
public class State {
private Town capital;
private Set<Town> towns;
public State() {
this.towns = new HashSet();
}
public State(Town capital) {
this.capital = captial;
this.towns = newHashSet();
this.towns.add(capital)
}
public void setCapital(Town capital) {
this.captial = capital;
}
public Town getCapital() {
return this.capital;
}
public void addTown(Town town) {
this.towns.add(town)
}
public Set getTowns() {
return this.towns;
}
}
城镇班:
public class Town {
private State state;
public Town() {}
public Town(State state) {
this.state = state;
this.state.addTown(this);
}
public void setState(State state) {
this.state = state;
this.state.addTown(this);
}
public State getState() {
return this.state;
}
}
然后,如果您有一个名为Town
的{{1}}对象,则可以使用该城市的州首府:
myTown
如果您有一个名为myTown.getState().getCapital();
的{{1}}对象,则会获得您使用的所有城镇:
State
答案 3 :(得分:1)
以下是我的想法。这种关系是一对多的(State to Town),所以在代码中表示它看起来像这样:
public class State {
private Set<Town> towns;
public State() {
// default constructor
}
public State(Set<Town> towns) {
this.towns = towns;
}
public void createTown(Town town) {
towns.add(town);
}
}
现在Town类看起来像这样:
public class Town {
private State state;
private boolean isCapital;
public Town() {
// default constructor
}
public Town(State state) {
this.state = state;
}
public void setCapital(boolean isCapital) {
this.isCapital = isCapital;
}
}
答案 4 :(得分:0)
为什么不是州内的一系列城镇,每个城镇都回顾他们所在的州?
答案 5 :(得分:0)
你应该研究封装,抽象和可能的继承。
您应该尝试将您创建的每个对象视为封装与其直接相关的数据,并提供访问和操作该数据的方法。
对于此问题,您可以创建两个类,State和Town。
您的州级会员将有一个名为Capital的成员,该成员将属于城镇类型 和一个名为Towns的列表,其中包含其中的所有城镇。城镇班级将有一个名为州的成员。
答案 6 :(得分:0)
从OOP的角度来看,这应该是正确的实现。我将使用C#语法,因为我对它很熟悉,但它不应该与java有太大不同。
public class State
{
public string Name {get;set;}
public ICollection<City> Cities {get;set;} //Access to all child cities
}
public class City
{
public string Name {get;set;}
public string State_Name {get;set;} //this is sort of a FK
public State State {get;set;} //Direct access to the State object related
}
您可以省略City类中的字符串State_Name,因为您可以使用city.State.Name访问同一属性;无论如何,出于某些目的,将“FK”直接放在子类上可能非常方便。当然,在这种情况下,您应该拥有确保FK与State对象保持同步的代码。如果使用这些类,比如说,通过ORM框架,通常会自动处理。
答案 7 :(得分:0)
聚合和授权..