2017-03-08 2 views
3

저장 방법이 오버로드 된 서비스가 있습니다. 하지만 문제는 컴파일 오류를주는 4 개의 변수로이 메서드를 호출하려고 할 때입니다.varargs로 메소드를 오버로드하는 방법은 무엇입니까?

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

'Object []'이 배열은 vararg가 아니며 –

+0

@TimCastelijns 내 질문을 편집했습니다. – hellzone

+0

일반적으로 이것은'myService.save ("test", (Object) request.getMethod(), [...])'와 같은 것의 유스 케이스이다. vararg와 함께 작동하는지 확실하지 않습니다. – Izruo

답변

0

두 가지 방법이 서로 다른 두 가지 일을한다고 생각합니다. 약간 다르지만 다르다. 그리고 따라서 : 단순히 다른 이름을 사용하여 여기를 고려하십시오!

과부하는 가볍게 사용해서는 안되며, 제공하는 예는 이점이 없습니다.

그 이상 : 반드시 "명명"을 조사해야합니다. os은 실제로 이러한 주장에 대해 아무 말도하지 않습니다. 코드 품질 포인트에서 지금 가지고있는 것 대신에

public void saveRequestDetails(String message, Request request) { 

대신에 더 좋은 것이 아닌지 궁금합니다.

+0

두 가지 다른 이유를 알지 못합니다. 둘 다 일부 추가 매개 변수가있는 메시지 객체를 저장하고 있습니다. – hellzone

+0

음, 나는 동의하지 않지만 괜찮습니다. 그러나 나는 약간의 업데이 트에 넣어, 아마 그들은 더 도움이됩니다. – GhostCat

관련 문제