2017-10-10 2 views
-1

Wie kann ich dieses Problem lösen:Java-Konstruktor: Verweis auf MyCalendarItem ist mehrdeutig

Fehler: (76, 9) Fehler: Verweis auf MyCalendarItem mehrdeutig ist beiden Konstruktor MyCalendarItem (Context, MyCalendar) in MyCalendarItem und Konstruktor MyCalendarItem (Zusammenhang AttributeSet) in MyCalendarItem Spiel

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); 
... 
... 
... 
} 

Antwort

1

Wenn der erste Parameter und der zweite Kontext-Parameter null ist, dann gibt es zwei Konstruktoren für die Signatur, die zu einer Mehrdeutigkeit führt.

Da Null-Parameter keinen Typ haben, wird der Compiler verwirrt, welche Methode in dieser Situation aufgerufen wird, damit der Code nicht kompiliert wird.

Sie können null übergeben, indem Sie es entweder auf Context oder MyCalendar umwandeln, sodass der Compiler weiß, welchen Konstruktor Sie verwenden möchten.

Verwendung:

this(context, (AttributeSet) null); 

Oder:

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

dank es – Monzur

+0

gelöst Wenn es funktioniert, vergessen Sie nicht, die Antwort zu markieren, wie neben der Antwort, indem Sie das Häkchen akzeptiert. –

1

Java nicht weiß, welche Konstruktor sollte es verwenden. Sie müssen null in den gewünschten Typ umwandeln.

+0

danke es gelöst – Monzur

1

Das null Literal hat keinen Typ, daher weiß der Compiler nicht, ob Sie MyCalendarItem(Context, MyCalendar) oder MyCalendarItem(Context, AttributeSet) aufrufen möchten. Sie können diese Mehrdeutigkeit aufzulösen, indem es ausdrücklich Gießen, z.B .:

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

danke es gelöst – Monzur

Verwandte Themen