Java构造函数:对MyCalendarItem的引用不明确

时间:2017-10-10 20:41:31

标签: java android

我该如何解决这个问题:

错误:(76,9)错误:对MyCalendarItem的引用不明确 MyCalendarItem中的构造函数MyCalendarItem(Context,MyCalendar)和MyCalendarItem中的构造函数MyCalendarItem(Context,AttributeSet)匹配

public MyCalendarItem(Context context) {
        this(context, null); //Error showing in this line
    }

    public MyCalendarItem(Context context, MyCalendar myCalendar) {
        this(context);
        this.myCalendar = myCalendar;
    }

    public MyCalendarItem(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public MyCalendarItem(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
...
...
...
}

3 个答案:

答案 0 :(得分:1)

如果第一个参数是context而第二个参数为null,那么该签名有两个构造函数会导致歧义。

由于null参数没有任何类型,编译器会混淆在这种情况下调用哪个方法,因此代码无法编译。

您可以通过将其转换为ContextMyCalendar来传递null,以便编译器知道您尝试使用哪个构造函数。

使用:

this(context, (AttributeSet) null );

或者:

this(context, (MyCalendar) null ); //this will cause infinite recursion in your case.

答案 1 :(得分:1)

Java不知道它应该使用哪个构造函数。您必须将null转换为您想要的类型。

答案 2 :(得分:1)

null字面值没有类型,因此编译器不知道您是打算调用MyCalendarItem(Context, MyCalendar)还是MyCalendarItem(Context, AttributeSet)。您可以通过显式转换来解决这种歧义,例如:

public MyCalendarItem(Context context) {
    this(context, (AttributeSet) null);
}