2009-05-12 8 views
1

Est-il possible de faire une méthode qui prendra n'importe quoi, y compris les objets, les entiers, etc.? J'ai une méthode qui vérifie la valeur si elle est nulle et je pensais que cela pourrait peut-être être fait avec des génériques au lieu de surcharger. Malheureusement, essayerGénériques Java

nullChecking(Class<? extends Object> value){ 
... 
} 

n'autorise pas les entiers car ils étendent le nombre pas l'objet. Y a-t-il un moyen?

Vive

+0

(Note: Nombre entier étend le nombre, étend l'objet, étend est essentiellement transitif.) –

+0

En fait, cela n'acceptera pas les nombres entiers car ils ne s'étendent pas ... –

Répondre

6

Tu ne peux pas le faire nullChecking(Object value)? Si vous voulez juste tester si c'est nul, cela fonctionnera.

+1

* slaps front * Je viens d'écouter un groupe de trucs sur les génériques aujourd'hui, donc je pense que je manquais à cette pensée. Merci :) Cheers – user100617

+0

etc ne fonctionnerait pas. Je veux dire int, char, long :) –

+0

Ouais ça ne marcherait pas sur int, char, long, etc. mais ceux-ci ne peuvent pas être nuls, donc il n'y a pas de réel problème. –

2

Je ne suis pas sûr de ce que vous essayez de faire ... S'il est en train de vérifier si un objet est null alors vous pouvez simplement faire ceci:

public static boolean nullChecking(Object obj) { 
    return obj == null; 
} 
+0

Oui, je fais quelque chose comme ça, c'est simplement de lancer une erreur si elle est nulle, donc elle ne retournera rien et l'objet correspondra à la facture dans ce cas. Cheers – user100617

+1

Je l'appellerais EnsureNonNull(). – starblue

+0

@starblue: Je m'attendrais à ce que "ensureNonBlue()" fasse quelque chose comme "if (obj == null) throw new NullPointerException()" ou quelque chose dans le même sens. Je ne m'attendrais pas à ce que ça retourne simplement de la valeur ... –

0

En fait, il y a une façon de le faire, mais je ne le recommanderais pas pour votre utilisation ...

Ainsi, voici comment faire ceci (et l'avertissement, il contourne la vérification de type de temps de compilation, de sorte que vous vous ouvriez aux exceptions d'exécution de la classe d'exécution. ..)

Dites que vous avez un "getter" que peut renvoyer plusieurs types - il peut être déclaré comme un type générique comme ceci:

public <X> X get(String propertyName) { ... } 

Vous pouvez faire la même chose pour un 'poseur':

public <X> void set(String property, X value) { ... } 
0

A

public <T> boolean isNull(T obj) { return obj == null; } 

travaillerait ... mais ... pourquoi?

Pensez-vous que

if (isNull(myObj)) { ... } 

est plus facile à écrire que

if (myObj == null) { .... } 

? Considérons que vous allez faire une invocation de méthode dans le premier cas et que vous consommez [presque rien, mais c'est le cas] des ressources système sans avantage logique, pour moi.

0

Depuis Java 1.7, vous pouvez utiliser les méthodes de java.util.Objects:

public static <T> T requireNonNull(T obj) 
public static <T> T requireNonNull(T obj, String message) 
public static <T> T requireNonNull(T obj, Supplier<String> messageSupplier) 

ou tout simplement vérifier leur code.

Questions connexes