2017-03-08 5 views
3

Ich habe einen Service, der gespeicherte Methode überlastet hat. Aber Problem ist, wenn ich diese Methode mit 4 Variablen aufrufen will gibt es Kompilierungsfehler.Wie überladen Methode mit Varargs?

Incompatible type: String cannnot be converted to Task 

Gibt es eine Möglichkeit, die erste Speichermethode aufzurufen, ohne den Methodennamen zu ändern?

public void save(String message, Object... os) {//first save 
    adapter.save(formatMessage(message), os); 
} 

public void save(String username, Task task, String message, Throwable ex) {//second save 
    adapter.save(formatMessage(username, task, message)); 
} 

Ich rufe mit 4 Variablen;

myService.save("test", request.getMethod(), request.getRequestURI(), 
      Integer.valueOf(request.getContentLength())); 
+0

'Objekt []' Dies ist ein Array, nicht Vararg –

+0

@TimCastelijns Bearbeitete meine Frage. – hellzone

+0

Im Allgemeinen ist dies ein Usecase für etwas wie 'myService.save (" test ", (Object) request.getMethod(), [...])'. Ich bin mir nicht ganz sicher, ob es mit einem Vararg funktionieren wird. – Izruo

Antwort

0

Ich denke, Ihre beiden Methoden zwei verschiedene Dinge tun; etwas anders, aber anders. Und so: Sie überlegen einfach, verschiedene Namen hier zu verwenden!

Denken Sie daran, dass Überlastung nicht leicht zu verwenden ist, und das Beispiel, das Sie geben, profitiert davon nicht.

Und darüber hinaus: Sie sollten auf jeden Fall in Ihre "Namensgebung" schauen; als os sagt eigentlich ... nichts über diese Argumente. Von einem Code-Qualität Punkt, frage ich mich, ob es nicht viel besser wäre, zu haben:

public void saveRequestDetails(String message, Request request) { 

statt, was Sie jetzt tun.

+0

Ich verstehe nicht, warum sie zwei verschiedene Dinge tun. Beide speichern das Nachrichtenobjekt mit einigen zusätzlichen Parametern. – hellzone

+0

Nun, ich stimme nicht zu, aber das ist in Ordnung. Aber ich habe einige Updates hinzugefügt, vielleicht sind sie hilfreicher. – GhostCat

Verwandte Themen