有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在spring构造函数中面临歧义,第二个构造函数被调用

我面临的一个问题是,生产的产品不完全符合标准。我已经读到,在构造函数不明确的情况下,会调用第一个构造函数。但我面临着一个完全不同的问题

我的班级-

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文件-

<bean class="com.spring.Addition" name="addition1">
    <constructor-arg>
    <value>12</value>
    </constructor-arg>
    <constructor-arg>
    <value>34</value>
    </constructor-arg>
    </bean>

主代码-

Addition addition = (Addition)applicationContext.getBean("addition1");
System.out.println(addition);

输出-

Constructor : double, double
Addition [a=12, b=34]

这里我唯一关心的是,当(int,int)构造函数在(double,double)构造函数之前定义时,为什么在这里调用第二个构造函数


共 (1) 个答案

  1. # 1 楼答案

    通过如下type属性指定构造函数的确切数据类型,可以避免这种歧义:

    <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>