我该如何解决这个问题:
错误:(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);
...
...
...
}
答案 0 :(得分:1)
如果第一个参数是context而第二个参数为null,那么该签名有两个构造函数会导致歧义。
由于null参数没有任何类型,编译器会混淆在这种情况下调用哪个方法,因此代码无法编译。
您可以通过将其转换为Context
或MyCalendar
来传递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);
}