我有两节课。一个(Person)用于getter和setter,另一个(People)用于计算数据。我的情况是,我使用ResultSet
从数据库获取数据,然后创建一个人物对象来存储行数据。然后我创建了人物对象来存储所有人。
每个对象创建为SET。
while(rs.next())
{
Set<People> people = new HashSet<people>();
Person person = new Person();
String name = rs.getString(2);
person.setName(name);
int id = rs.getInt(1);
person.setId(id);
String dept = rs.getString(4);
person.setDept(dept);
int age = rs.getInt(3);
person.setAge(age);
people.add(person);
}
return people;
现在问题是While循环people.add(person);
它说
类型Set中的方法add(People)不适用于参数(Person)
我如何克服这个问题?
感谢。
答案 0 :(得分:8)
我的设计理解是,您有人有多人关系,因此People
类包含Person
个对象的集合。然后我会期待这样的事情:
public class Person {
private String name;
private Date dateOfBirth;
// .. more attributes
// getters and setters
// overrides of equals, hashcode and toString
}
public class People implements Set<Person> {
private Set<Person> persons = new HashSet<Person>();
public boolean add(Person person) {
return persons.add(person);
}
// more methods for remove, contains, ...
}
因此,在您的数据库相关代码中,您不需要创建另一个集合,因为People
已经拥有您需要的集合:
People people = new People(); // or get it, if it's already created
while(rs.next())
{
Person person = new Person();
String name = rs.getString(2);
person.setName(name);
int id = rs.getInt(1);
person.setId(id);
String dept = rs.getString(4);
person.setDept(dept);
int age = rs.getInt(3);
person.setAge(age);
people.add(person);
}
return people;
答案 1 :(得分:2)
我不明白为什么你首先想要2个班级。你也有人实现计算部分。但是,你可以做些什么:
class People implements Set<Person> {
private HashSet<Person> hashset = new HashSet<Person>();
// ... your computational code goes here
// delegate all Set methods to hashset
}
然后:
People people = new People();
while(rs.next())
{
Person person = new Person();
String name = rs.getString(2);
person.setName(name);
int id = rs.getInt(1);
person.setId(id);
String dept = rs.getString(4);
person.setDept(dept);
int age = rs.getInt(3);
person.setAge(age);
people.add(person);
}
return people;
答案 2 :(得分:1)
根据您的尝试,我觉得,您应该在添加到集合之前将Person转换为People类。您的People类可能有一个构造函数,该构造函数将Person作为参数并将所需字段从Person复制到People。您要添加到集合中的代码将显示为people.add(new People(person));
当你声明Set<People> people = new HashSet<People>();
时,这个集合应该包含'type'对象的对象,即People的实例或People的子类的实例。如果People是一个接口,那么该集合可能包含实现该接口的任何对象。
答案 3 :(得分:1)
我理解Person
是一个数据结构(类似于bean,带有getter和setter),People
应包含数据库中的所有Person
个对象,并对它们执行计算。 / p>
如果这是真的,首先,你不能在循环中声明人(因为将为每个People
创建一个新的Person
对象,你不希望这样,我理解。)
其次,People
需要能够包含Person对象。所以它至少应该由Set
个Person
个对象组成。您可以根据需要添加更多功能。所以,尝试这样的事情:
public class People {
Set<Person> persons = new HashSet<Person>();
Set<Person> getPersons() {
return persons;
}
int computeSomethingAboutPeople() {
// return as you please
}
}
像这样使用它,如上一张海报所示:
People people = new People();
while(rs.next())
{
Person person = new Person();
String name = rs.getString(2);
person.setName(name);
int id = rs.getInt(1);
person.setId(id);
String dept = rs.getString(4);
person.setDept(dept);
int age = rs.getInt(3);
person.setAge(age);
people.getPersons().add(person);
}
int answer = people.computeSomethingAboutPeople();
答案 4 :(得分:0)
我认为不应该在循环中写入Set<People> people = new HashSet<people>();
。
答案 5 :(得分:0)
class Cartesian
{
double x,y,z;
public
Cartesian()
{
x=y=z=0;
}
Cartesian (int i,int j,int k)
{
x=i;
y=j;
z=k;
}
Cartesian add_coordinates(Cartesian c)
{
c.x=x+c.x;
c.y=y+c.y;
c.z=z+c.z;
return c;
}
void display()
{
System.out.println("Addition of coordinates is : "+x+"i "+y+"j "+z+"k ");
}
}
class Coordinate
{
public static void main(String[] args)
{
Cartesian obj1 = new Cartesian(5,5,-10);
Cartesian obj2 = new Cartesian(5,5,-10);
Cartesian obj3 = new Cartesian();
obj3=obj1.add_coordinates(obj2);
obj3.display();
}
}