2014-07-27 2 views
3

Je ai une application qui fonctionne avec une entité qui ont tous une clé primaire ___ID (par exemple, StudentID, CourseID ... etc)Modèles de conception pour les entiers sécurisés?

Je veux ajouter un peu de type de sécurité au programme, par exemple un fonction qui prend en entrée un StudentID, ne peut pas être passé accidentellement un CourseID.

idée d'abord qui est venue à l'esprit est de créer des classes simples vides comme ceci:

public class StudentID extends java.util.Integer {} 
public class CourseID extends java.util.Integer {} 

Cela ne fonctionne pas depuis java.util.Integer est final et ne peut être prolongée.

idée deuxième est d'avoir une classe de données qui contient uniquement un nombre entier:

public class StudentID { 
    private final int id; 
    public int get() { return id; } 
} 

Bien qu'il serait beaucoup de code de passe-partout.

idée troisième est comme une seconde idée, mais pour sauver le code boilerplate en ayant une classe de base qui définit la méthode get et des classes vides qui en héritent:

public abstract class AbstractID { 
    private final int id; 
    public int get() { return id; } 
} 

public class StudentID extends AbstractID{}; 
public class CourseID extends AbstractID{}; 

Existe-t-il d'autres/modèles les plus connus pour ce problème?

+2

Ce n'est pas '' java.util.Integer' mais java.lang.Integer'. – johnchen902

+0

'Integer' est la classe' final' que vous ne pouvez pas étendre en Java – Braj

+0

@ user3218114 - Je pense que Morad sait déjà que: "Cela ne fonctionne pas car java.util.Integer est final et ne peut pas être étendu" – Kobi

Répondre

3

Que diriez-vous de ID<T>? Si vous voulez limiter un argument à une fonction, je pense que vous pouvez faire comme suit:

void foo (ID<? extends Student> param); 
Questions connexes