Ich bin neu bei Generika und habe das folgende Problem festgestellt, als ich versuchte, sie in einem kleinen Programm zu verwenden, von dem ich versuchen werde, die notwendigen Informationen zu geben.Generische Typkonvertierung für Methodenargument nicht möglich, warum?
Ich werde versuchen, nur das Notwendige zu geben, aber wenn irgendetwas fehlt, lass es mich wissen und ich werde zur Verfügung stellen, was benötigt wird.
Das erste, was ist die folgende Schnittstelle:
1: public interface IPrice<T extends IPrice<T>> {
2: void setPriceToZero();
3: T addPrice(T price);
4: T subtractPrice(T price);
5: T multiplyPriceByFactor(int factor);
6: String priceToString();
7: }
Es wird von einer Klasse BnSPrice umgesetzt wird; hier die wahrscheinlich notwendig ein Teil davon:
1: public class BnSPrice implements IPrice<BnSPrice> {
2: public BnSPrice subtractPrice(BnSPrice price) {...}
2: }
Jetzt ist der Teil, der nicht kompiliert werden und die ich nicht wirklich verstehen:
1: public static void main(String[] args){
2: [...]
3: IPrice<? extends BnSPrice> test = new BnSPrice(5);
4: test.subtractPrice(new BnSPrice(5));
5: [...]
6: }
Was ich bekommen ist
"Error:(27, 28) java: incompatible types: main.bnsCalculatorModel.BnSPrice >cannot be converted to capture#1 of ? extends >main.bnsCalculatorModel.BnSPrice"
in der Zeile wo ich die Subtract-Methode anrufe.
Warum passiert das und wie kann ich das korrigieren, damit ich noch auf die Schnittstelle programmieren kann?
(Mein Ziel ist, dass es einfach sein sollte mein Programm mit anderen „Arten von Preisen“ in der Zukunft. Zu verlängern)
Zeilennummern bitte hinzufügen! Ist der Fehler in der Zeile 'IPrice erweitert BnSPrice> test = new BnSPrice (5); – Pyranja
Mögliches Duplikat von [Warum der generische Typ für das Argument nicht anwendbar ist, erweitert die Superklasse für beide?] (Http://stackoverflow.com/questions/21452966/why-generic-type-isnot-applicable-for-argument-extends -super-class-for-both) –
Zeilennummern hinzugefügt; Fehler war in Codeblock 3 Zeile 4. Sweeper hat einen guten Job bei der Erklärung. – Wolfone