具有可变参数值而不更改其签名的方法

时间:2017-10-10 16:18:04

标签: java c#

这篇文章是关于我的求职面试问题,我在这里要求找到解决问题的不同方法。

面试官让我在白板上写下我将如何设计一个接收Person对象的方法,所以我写这个:

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)
{   
}

(在每次更改时,他告诉我不得修改方法签名)

面试官只是说&#34; ok&#34;但我不认为他对我的方法很有信心,我不是C#或Java的专家(面试官说他掌握了Java)而且我很紧张,只是想到了这个&#34; easy& #34;解决方案,但似乎这是一个非常糟糕的选择。

如果您能指导我使用C#或Java

以最佳方式解决此问题,我将不胜感激

1 个答案:

答案 0 :(得分:0)

嗯,我认为这里要提到的重要事项也是对实体行为的不同看法。

所以Address类或者更好的它应该是一个不可变的DataType类。一个人可以拥有一个或多个地址对象。 我的问题与Boss和Person类有关:你想要一个知道N个人的Boss,或者你想要一个知道N个Boss对象的人,或者两个都知道N:或N:M关系的人。

我的建议是关于延长Boss with Person的问题不是这样做的。你有简单的实体类,扩展很重。如果您想要这样的行为,请使用组合,例如Boss有一个person属性,通过在Boss类中再次定义地址等来委托或简单地重用你的数据类型。

没有变化的参数确定有点愚蠢。我对Parameter类的目的是什么,但这不是一个好方法。因此,如果您的方法只接收Person对象,则使用Person类型,否则使用Collection类型重载该方法。

所以这只是我对这个话题的看法;)