2017-03-08 37 views
3

我有一個重載保存方法的服務。但問題是,當我想用​​4個變量調用這個方法時,會產生編譯錯誤。如何用可變參數重載方法?

Incompatible type: String cannnot be converted to Task 

有沒有辦法在不更改方法名稱的情況下調用第一個保存方法?

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)); 
} 

我打電話給4個變量;

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

'對象[]'這是一個數組,不是可變參數 –

+0

@TimCastelijns編輯我的問題。 – hellzone

+0

一般來說,這是一個類似'myService.save(「test」,(Object)request.getMethod(),[...])''的用例。我只是不確定它是否可以用可變參數工作。 – Izruo

回答

0

我認爲你的兩種方法是做兩件不同的事情;略有不同,但不同。因此:您可以考慮在這裏簡單地使用不同的名稱!

請記住,重載不應該輕易使用,並且您提供的示例不會從中受益。

除此之外:你一定要看看你的「命名」;因爲os確實沒有說這些論據。從代碼質量的角度來看,我想知道是不是會好得多:

public void saveRequestDetails(String message, Request request) { 

而不是你現在正在做的。

+0

我不明白他們爲什麼做兩件不同的事情。兩者都保存消息對象與一些額外的參數。 – hellzone

+0

嗯,我不同意,但那很好。但我提出了一些更新,也許他們更有幫助。 – GhostCat