10
votes

Java a-t-il un équivalent de référence const?

Voici un extrait de code:

public GamePiece GetGamePiece(Point pt) {
    return new GamePiece(m_theGameBoard[pt.GetRow()][pt.GetColumn()]);
}


0 commentaires

3 Réponses :


1
votes

Oui. Vos choix font fondamèmement, faites bouillir jusqu'à avoir: xxx

ou en utilisant l'une des collections Java que vous pourriez ensuite passer à travers des collections.unmodifiablelist (...)

(Remarque que si vous utilisiez une liste multidimensionnelle, vous devez faire attention à envelopper les listes intérieures également pour vous assurer qu'elles ne sont pas modifiables non plus)

Si cela ne sera jamais utilisé pour les tests , vous pouvez également créer une fonction qui renvoie une copie profonde du tableau.


0 commentaires

3
votes

Définissez la variable comme protégé , de sorte que si le test de l'unité est dans le même emballage, il peut y accéder.

Cependant, j'ajouterais simplement une méthode publique Letpiece (intilaille, int col) qui renvoie la pièce sur ce carré (ou null s'il n'y a pas de pièce là-bas). Il est probable que vous auriez besoin d'une méthode comme celle-ci de toute façon, et vous pourriez l'utiliser dans vos tests.


3 commentaires

Je suis sous l'impression que protégée est la même chose que celle de C's Friend.


Mais que se passe-t-il si une classe travaillant avec le conseil doit afficher toutes les pièces du tableau (comme une classe d'interface graphique qui doit afficher toutes les pièces du tableau) - Comment allez-vous y aller sans une méthode pour obtenir des pièces? Dans mon application d'échecs, j'ai une méthode board.pieceon (carré) qui renvoie une pièce si une pièce est présente, ou null si le carré vide. Retournerait une carte des carrés occupés mappés en morceaux être mieux?


Javaworld.com/javaworld/jw-01-2004/ jw-0102-toolbox.html Pourquoi ne pas avoir les objets, étant donné un contexte graphique, se dessiner? Ajouter un Dessinez la méthode aux pièces (ou une sous-classe de chaque pièce, si vous préférez garder le code d'interface utilisateur séparé). Je pense board.draw (graphiques) et pièce.draw (graphiques) fait un sens parfait. Combinez ceci avec la technique de Holub décrite dans le lien et vous avez une bonne solution qui évite de casser l'encapsulation.



2
votes

Le modificateur d'accès par défaut pour une méthode ou une propriété est "protégé par un package", ce qui signifie "visible uniquement dans mon colis". Par conséquent, vous pouvez imiter la sémantique de la "amitié", tout en maintenant une base de code distincte pour les tests, en ayant deux dossiers de source distincts, mais avec la même structure d'emballage.

public class MyClass {
    private int nonTestedThing;
    int[][] testedThing;  // this is visible to TestMyClass
    // or
    // protected int[][] testedThing;
    // if you want it visible to kids
}


0 commentaires