情景:
[更新] 类债权人可以是组织或人员类型。债权人可以是类型A,类型B或类型C.这里类型A是组织,类型B是人员。我想知道如何以最好的Java-ish方式实现它。
OR
哪个更优选或者它们完全不同 东西?我错过了什么?也解释。
我有以下两个类Org和Personnel。
public class Org implements Entity{
private String name;
public String getName(){
return this.name;
}
public void setName(String name){
this.name = name;
}
public Org(String name){
this.setName(name);
}
}
public class Personnel implements Entity{
private String name;
private String phoneNumber;
public String getName(){
return this.name;
}
public void setName(String name){
this.name = name;
}
public void setPhoneNumber(){..}
public Personnel(String name){
this.setName(name);
}
}
上述类实现"
的接口实体interface Entity{
String getName();
}
案例1和案例2代码如下。
案例1。
这里,名为Creditor的第三个类可以是一个Org或Personnel,所以我添加了一个Entity接口作为类型,来引用这个 类债权人或组织对象。
public class Creditor{
public Entity entity;
public Creditor(Entity entity){
this.entity = entity;
}
public static void main(String[] args){
Org o = new Org("Name");
Creditor c = new Creditor(o);
Personnel p = new Personnel("AJ");
Creditor c1 = new Creditor(p);
}
}
OR
案例2.
不是使用Interface,为什么我不使用泛型类型框并根据需要实例化我想要的对象,例如 示例人员或组织。
public class Creditor<T> {
private T t;
public Creditor(T t){
this.t = t;
}
public static void main(String[] args){
Org o = new Org("Name");
Personnel p = new Personnel("AJ");
Creditor<Org> c1 = new Creditor<>(o);
Creditor<Personnel> c2 = new Creditor<>(p);
}
}
答案 0 :(得分:1)
你的问题没有真正的答案。在每种方式都有利弊,取决于新Crediator类的用法。 例如,一个使用泛型方法的专家是,如果你返回内部对象,就像这样:
Org o = c1.get();
不能回归到所需的真实类型。 所以,试着考虑一下你的课程是什么样子,然后根据你的需要来决定哪个更合适。
答案 1 :(得分:1)
实际上,解决方案1中的Creditor
与解决方案2中的Creditor<T extends Entity>
之间没有区别,除了参数化Creditor<T extends Entity>
这一事实。
因此,解决方案2的优点和不便之处在于参数化:
Creditor
变量的所有声明参数,并且如果你不能这样做会发出恼人的警告,如果在大多数情况下这种情况就会变得非常难看。如果您不知道,我建议您从解决方案2开始,如果您发现不方便的优点,请删除参数化。从解决方案2到解决方案1,重构将更容易。