2009-05-12 17 views
1

Ist es möglich, eine Methode zu erstellen, die alles, einschließlich Objekte, Ganzzahlen usw. nimmt? Ich habe eine Methode, die den Wert überprüft, wenn es null ist, und ich dachte, dass es möglicherweise mit Generics getan werden könnte, anstatt zu überladen. LeiderJava-Generics

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

wird nicht zulassen Ganzzahlen, wie sie Zahl nicht Objekt erweitern. Gibt es einen Weg?

Prost

+0

(Hinweis: Integer extends Nummer; Zahl extends Object; extends ist im Wesentlichen transitiv.) –

+0

Eigentlich wird dies keine Integer akzeptieren, da sie Class nicht erweitern ... –

Antwort

6

Kannst du nicht tun nullChecking(Object value) gerade? Wenn Sie nur testen wollen, ob es null ist, wird es funktionieren.

+1

* Ohrfeigen * Ich habe gerade einen Haufen gehört von Dingen über Generika heute, also denke ich, dass ich mich diesem Denken schuldig machte. Thanks :) Prost – user100617

+0

usw. nicht funktionieren würde. Ich meine int, char, lang :) –

+0

Ja, es würde nicht funktionieren Int, char, long, etc. aber diese können nicht null sein, also gibt es kein wirkliches Problem. –

2

Ich bin mir nicht sicher, was Sie zu tun versuchen ... Wenn es, wenn ein Objekt überprüft gerade ist, ist null dann können Sie einfach tun:

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

Ja, ich mache etwas wie das, es ist einfach, einen Fehler zu werfen, wenn es Null ist, so wird es nichts zurückgeben und Objekt passt die Rechnung in diesem Fall. Prost – user100617

+1

Ich würde es useNonNull() nennen. – starblue

+0

@Starblue: Ich würde erwarten, dass "sicherstellenNonBlue()" etwas wie "if (obj == null) neue NullPointerException()" oder etwas mit dem gleichen Effekt zu werfen. Ich würde nicht erwarten, dass es einfach einen Wert zurückgibt ... –

0

Eigentlich ist es eine Möglichkeit, dies zu tun, aber ich würde es nicht für Ihre Verwendung empfehlen ...

Also, hier ist, wie dies zu tun ist (und Warnung, umgeht die Kompilierzeit Typprüfung, so dass Sie sich bis zur Laufzeit Klassenausnahme Ausnahmen öffnen. ..)

Angenommen, Sie haben einen "Getter", der mehrere Typen zurückgeben kann - es kann als ein generischer Typ wie so erklärt werden:

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

Sie können für einen 'Setter' das Gleiche tun:

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

A

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

funktionieren würde ... aber ... wozu?

Glauben Sie, dass

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

leichter zu schreiben als

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

?

Bedenken Sie, dass Sie im ersten Fall einen Methodenaufruf durchführen und das [fast nichts, aber es verbraucht] Systemressourcen ohne logischen Vorteil für mich.

0

Seit Java 1.7 können Sie die Methoden von java.util.Objects verwenden:

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) 

oder einfach nur ihren Code überprüfen.