2017-10-10 77 views
-3

这篇文章是关于我面试的求职面试问题,我在这里要求找到我应该用来解决它的不同方式。可变参数值不改变其签名的方法

面试官问我在白板上的我怎么会设计出将收到一个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) 
{ 
} 

(在每一个变化,他告诉我的方法签名不能修改)

面试官只是说“OK”,但我没想到他很相信我的做法,我不是在C#或Java中的专家(面试官说他掌握了Java),而且我非常紧张,刚才想到这个“简单”的解决方案,但看起来这是一个非常糟糕的选择。

我将不胜感激,如果你能引导我使用C#或Java的最佳途径来解决这个

+0

我认为面试官希望你能有老大延长的人,alors你的方法不接收地址的列表,它接受它已经具备了一个人地址列表。我不确定你试图用Parameter来做什么。 –

+1

因此不改变方法签名是一个要求?你在标题中写过,但从未在问题中澄清过。 –

+0

恕我直言,“老板”应该有一个下属名单,而不是“人”列表老板......还有一个“老板”通常是一个人,因此班级老板应该扩展班级人。 –

回答

0

嗯,好吧,我认为最重要的事情在这里提及也都对实体的行为不同的看法。

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

我的建议涉及扩大与人老板的问题是不这样做。你有简单的实体类和扩展很重。如果你想要这样的行为使用组合,例如Boss具有一个人员属性,通过在Boss类中再次定义地址等来重复使用您的数据类型。

随着不变的参数确定这有点愚蠢。我用Parameter类得到了你的目的,但那不是一个好方法。因此,如果您的方法只能接收一个Person对象,则使用Person类型,否则用Collection类型重载该方法。

所以这只是我对这个话题的意见;)