What does “The constructor … is ambiguous” mean?

后端 未结 4 963
花落未央
花落未央 2021-01-07 17:37

I would like to know what the error message in Eclipse means:

The constructor Case(Problem, Solution, double, CaseSource) is ambiguous

相关标签:
4条回答
  • 2021-01-07 17:49

    To add on to other answers, it can be avoided by casting the argument to what is intended, e.g.:

    class Foo {
    
        public Foo(String bar) {}
        public Foo(Integer bar) {}
    
        public static void main(String[] args) {
            new Foo((String) null);
        }
    
    }
    
    0 讨论(0)
  • 2021-01-07 17:53

    This means that you have two constructors with the same signature, or that you're trying to create a new instance of Case with parameters that could match more than one constructor.

    In your case :

    Case(Problem, Solution, double, CaseSource)
    

    Java create methods (constructors) signatures with the parameter types. You can have two methods with the same similar parameter types, and therefore it may be possible to generate ambiguous calls by providing ambiguous arguments that could match multiple method (constructor) signatures.

    You may reproduce this error (which is not eclipse's fault) with this code :

    class A {
        public A(String a) { }
        public A(Integer a) { }
    
        static public void main(String...args) {
            new A(null);    // <== constructor is ambiguous
        }
    }
    
    0 讨论(0)
  • 2021-01-07 18:02

    In other words, it is unclear which of constructors must be called.

    0 讨论(0)
  • 2021-01-07 18:12

    The problem exists when you try to instantiate a class that could apply to more than one constructor.

    For example:

    public Example(String name) {
        this.name = name;
    }
    
    public Example(SomeOther other) {
        this.other = other;
    } 
    

    If you call the constructor with a String object, there's one definite constructor. However, if you instantiate new Example(null) then it could apply to either and is therefore ambiguous.

    The same can apply to methods with similar signatures.

    0 讨论(0)
提交回复
热议问题