2016-11-25 14 views
2

Gerade jetzt muß ich meinen Controller 2 verschiedene Arten von Objekt zurückzukehren Business-Logik basierend auf, Meine Frage ist also soll ich verwendenWas ist der Unterschied zwischen Rückgabetyp ResponseEntity ist <?> und ResponseEntity <Object> und ResponseEntity <myCustomClass>

ResponseEntity <?> 

oder sollte ich verwenden:

ResponseEntity <Object> 

Was ist der Unterschied zwischen diesen Rückgabetypen und warum sollte ich Sie?

Werden Änderungen an JSON vorgenommen, die von Spring Controller zurückgegeben werden?

Ich frage nach Rückgabetypen, nicht Eingangsparameter.

verwende ich Spring MVC 4.

+1

Mögliche Duplikat verwenden [Was ist der Unterschied zwischen? und Objekt in Java-Generics?] (http://stackoverflow.com/questions/678822/what-is-the-difference-between-and-object-in-java-generics) – developer

Antwort

0

über dieses Problem denken als

ResponseEntity<?> 

entspricht

ResponseEntity<? extends Object> 

Eine Instanz SomeClass<String> Matches SomeClass<?> aber nicht SomeClass<Object> zu sein.

Ich denke, es ist ein häufiges Missverständnis, dass in der Java-Liste kein Untertyp von List ist, während String [] tatsächlich ein Subtyp von Object [] ist. Das ist einer der Gründe, warum Generika und Arrays nicht gut miteinander harmonieren. Arrays in Java sind kovariant, Generika sind nicht, sie sind invariant.

Also, um es zusammenzufassen, könnte man ResponseEntity<?> und verwenden Sie es in Ihrem Controller wie diese

if (somecondition) 
    return new ResponseEntity<Success>(HttpStatus.OK); 
else 
    return new ResponseEntity<Error>(HttpStatus.CONFLICT); 
Verwandte Themen