2017-03-08 2 views
3

私は、オーバーロードされた保存メソッドを持つサービスを持っています。しかし問題は、このメソッドをコンパイルエラーを与える4つの変数で呼びたいときです。メソッドをvarargsでオーバーロードする方法は?

Incompatible type: String cannnot be converted to Task 

メソッド名を変更せずに最初にsaveメソッドを呼び出す方法はありますか?

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

'Object []'これはvarargではなく配列です –

+0

@TimCastelijns私の質問を編集しました。 – hellzone

+0

一般に、これは 'myService.save(" test "、(Object)request.getMethod()、[...])'のような用途のためのものです。私はそれがvarargで動作するかどうかは完全には分かりません。 – Izruo

答えて

0

あなたの2つの方法は2つの異なることを行っていると思います。わずかに異なるが、異なる。したがって、あなたは単にと異なるの名前を使用すると考えています!

オーバーロードは軽く使用しないでください。与えている例は、その恩恵を受けません。

それを超えて:間違いなくあなたの "命名"を調べる必要があります。 osは、実際にはこれらの議論については何も言いません。コード品質の点からすれば、それほど良くないのではないかと疑問に思っています。

public void saveRequestDetails(String message, Request request) { 

+0

なぜ2つの異なることをしているのですか?両方ともいくつかの追加パラメータを持つメッセージオブジェクトを保存しています。 – hellzone

+0

まあ、私は同意しませんが、それは問題ありません。しかし、私はいくつかの更新を入れました、多分彼らはより有用です。 – GhostCat

関連する問題