Java 具有可变参数值且不更改其签名的方法
这篇文章是关于我在面试中遇到的一个问题,我在这里提出这个问题是为了找到解决这个问题的不同方法 面试官让我在白板上写下我将如何设计一种接收Person对象的方法,因此我写下:Java 具有可变参数值且不更改其签名的方法,java,c#,Java,C#,这篇文章是关于我在面试中遇到的一个问题,我在这里提出这个问题是为了找到解决这个问题的不同方法 面试官让我在白板上写下我将如何设计一种接收Person对象的方法,因此我写下: class Person { //Some properties } public void MyMethod(Person p) { } 然后面试官告诉我,该方法必须为此人接收一个地址列表数组,我修改如下: class Person { //Some properties private
class Person
{
//Some properties
}
public void MyMethod(Person p)
{
}
然后面试官告诉我,该方法必须为此人接收一个地址列表数组,我修改如下:
class Person
{
//Some properties
private List<Address> adds;
}
class Address
{
//Some properties
}
public void MyMethod(Person p)
{
}
然后他告诉我这个方法必须收到一份有地址的人的名单,还有那个人的老板的名单,所以我这样做了:
class Parameter
{
private List<Person> pers;
}
class Person
{
//Some properties
private List<Address> adds;
private List<Boss> boss;
}
class Address
{
//Some properties
}
class Boss
{
//Some properties
}
public void MyMethod(Parameter p)
{
}
在每次更改中,他都告诉我不能修改方法签名
面试官只是说可以,但我不认为他对我的方法很信服,我不是C或Java方面的专家面试官说他精通Java,我非常紧张,以至于我想到了这个简单的解决方案,但似乎这是一个非常糟糕的选择
如果您能指导我使用C或Java以最佳方式解决这个问题,我将不胜感激。好的,我认为这里要提到的重要一点是对实体行为的不同看法 所以Address类或者更好的,它应该是一个不可变的数据类型类。一个人可以有一个或多个地址对象。 我的问题与Boss and Person类有关:您想要一个认识N个人的Boss,还是想要一个认识N个Boss对象的人,或者两者都是1:N或N:M关系 我的建议是不要这样做。您有简单的实体类,扩展很繁重。如果您想要这样的行为,请使用组合,例如,Boss具有带有委派的person属性,或者通过在Boss类中再次定义address等简单方式重用您的数据类型 在不改变参数ok的情况下,这有点愚蠢。我知道你使用参数类的目的,但这不是一个好方法。因此,如果您的方法应该只接收Person对象,请使用Person类型,否则将使用集合类型重载该方法
所以这只是我对这个话题的看法 我认为面试官希望你有一个上司扩展的人,如果你的方法没有收到地址列表,它会收到一个已经有地址列表的人。我不确定您试图对参数做什么。所以不更改方法签名是一项要求?你在标题中写道,但从未在问题中澄清。我认为老板应该有一份下属名单,而不是老板名单。。。另外,Boss通常是个人,因此类Boss应该扩展类Person。@PaulLemarchand创建参数类是因为他要求我接收persons@OHGODSPIDERS谢谢你的关注,我只是修改了这个问题来添加这个