2017-09-25 6 views
0

J'ai quelques méthodes que je veux porter le même nom, et je déterminée en utilisant une surcharge être la solution probable. Le problème est, je ne peux pas le faire avec des conteneurs:Java conteneur surcharge

public void render(Vector2Obj<Double> display) { 
    g.drawImage(sprite, display.getX().intValue(), display.getY().intValue(), null); 
} 

public void render(Vector2Obj<Integer> display) { 
    g.drawImage(sprite,display.getX(), display.getY(), null); 
} 

L'erreur de syntaxe, il me donne est « choc de nom: les deux méthodes ont le même effacement ».

Mes deux questions sont:

  1. Pourquoi ne java me laisser faire cela?

  2. est-il une meilleure solution au que:

    public void renderD(Vector2Obj<Double> display) { //notice the name change 
        g.drawImage(sprite, display.getX().intValue(), display.getY().intValue(), null); 
    } 
    
    public void renderI(Vector2Obj<Integer> display) { //notice the name change 
        g.drawImage(sprite,display.getX(), display.getY(), null); 
    } 
    

    Ou en les séparant par nom?

+0

« Ou en les séparant par nom? » Que fait d'autre 2? –

+0

Vous pourriez avoir les surcharges 'render (int x, int y)' et 'render (double x, double x)'. –

+0

Rien changeant juste à renderD ou renderI au lieu de simplement rendre –

Répondre

0

Explorez les génériques avec des caractères génériques, par exemple Vector2Obj<? extends Number>.

public void render(Vector2Obj<? extends Number> display) { 
// do something by accessing methods available in Number 
} 

Si votre application doit encore faire la distinction entre int et double alors vous pouvez vérifier objet d'affichage si elle est une instance de Integer ou Double puis l'acheminer vers des méthodes surchargées drawImage.

+0

Eh bien, le problème est qu'il y a display.getX(). IntValue() il ne sait pas quelle est la partie intValue(). –

+0

Ensuite, ayez une seule méthode comme ci-dessus avec des génériques pour toutes les sous-classes de Number, puis vérifiez pour instanceOf, puis gérez votre int et doublez en surchargeant drawImage avec les primitives. Une autre option à explorer est le modèle de conception de méthode d'usine pour cette situation. – JRG