I'm facing an issue which is producing an output which is not exactly per the norm. I have read that in case of constructor ambiguity the first constructor gets called. But I'm facing a completely different issue.
My class -
public class Addition {
private int a;
private int b;
public Addition() {
super();
// TODO Auto-generated constructor stub
}
public Addition(int a, int b) {
super();
this.a = a;
this.b = b;
System.out.println("Constructor : int, int");
}
public Addition(double a, double b) {
super();
this.a = (int)a;
this.b = (int)b;
System.out.println("Constructor : double, double");
}
public void doSum() {
System.out.println("Sum is -> " (this.a this.b));
}
@Override
public String toString() {
return "Addition [a=" a ", b=" b "]";
}
}
XML file -
<bean class="com.spring.Addition" name="addition1">
<constructor-arg>
<value>12</value>
</constructor-arg>
<constructor-arg>
<value>34</value>
</constructor-arg>
</bean>
Main code -
Addition addition = (Addition)applicationContext.getBean("addition1");
System.out.println(addition);
Output-
Constructor : double, double
Addition [a=12, b=34]
My only concern here is why is the second constructor getting called here, when (int,int) constructor is defined before the (double,double) constructor?
CodePudding user response:
You can avoid such ambiguity by specifying the exact data type for constructor, via type
attribute as follows:
<bean class="com.spring.Addition" name="addition1">
<constructor-arg type="int">
<value>12</value>
</constructor-arg>
<constructor-arg type="int">
<value>34</value>
</constructor-arg>
</bean>