我在下面创建了类。
public class SomeRequest<B extends Billing,E extends Employee, L extends Level>{
B billing;
E employee;
Class<L> level;
public void process(HashMap<String, Object> input){
this.billing = (B)data.get("billing");
this.employee= (E)data.get("employee");
this.level = (Class<L>)data.get("level");
//Some logic
}
}
在上面的课程Employee
中,Billing
和Level
是Java POJO。
现在我如何实例化以上SomeRequest
类?
谢谢!
答案 0 :(得分:1)
假设SomeRequest
类有一个无参数构造函数
在Java 7中使用diamond operator
SomeRequest<Billing,Employee,Level> instance = new SomeRequest<>();
在Java 6或5中
SomeRequest<Billing,Employee,Level> instance = new SomeRequest<Billing,Employee,Level>();
答案 1 :(得分:0)
在Java 5或6中,您可以使用工厂方法替换具有泛型的构造函数。在Java 5或6中,类型推断在方法上工作得很好,但在构造函数上却没有。你可以这样写:
public class SomeRequest<B extends Billing,E extends Employee, L extends Level>{
private SomeRequest(B billing, E employee, L level) {
// ...
}
public static <B,E,L> with(B billing, E employee, L level) {
return new SomeRequest<B, E, L>(billing, employee, level);
}
}
现在你不应该写new SomeRequest(billing, employee, level)
,你可以写简单的SomeRequest.with(billing, employee, level)
。
哦,对不起,我之前已经看过你对Java 7的评论。
答案 2 :(得分:0)
@ user3269829您不应该使用HashMap来包含不同类型的数据。您可以添加自定义容器,即具有三个字段的类:
class Container<B extends Billing,E extends Employee, L extends Level> {
B billing;
E employee;
L level;
public Container(B b, E e, L l) {
billing = b;
employee = e;
level = l;
}
// ... getters only!
}
process()方法将具有下一个签名:
public void process(Container<B, E, L> input)
在process()方法中,你可以:
SomeRequest<Billing,Employee,Level> instance = new SomeRequest<>();
instance.setBilling(container.getBilling());
instance.setEmployee(container.getEmployee());
instance.setLevel(container.getLevel());
或
SomeRequest<Billing,Employee,Level> instance = new SomeRequest<>(container.getBilling(), container.getEmployee(), container.getLevel());