내 질문에 대한 답변을 찾고 잠시 웹을 검색 한 후 내 문제에 대한 효과적인 해결책을 제공하는 것으로 보이는 게시물을 찾을 수 없습니다.
현재는 서로 다른 데이터 유형 입력에 대해 메서드를 오버로드합니다.
예를 들면 :
public void ex1(String in){
public void ex1(int in){
나는 이것을 한 줄로 압축하는 방법이 있다고 상상할 것입니다.
public void ex1(opt(String in), opt(int in)){
또는
public void ex1((String/int) in){
그러나 내가 본 한, 누구도 이러한 형식을 사용하는 합리적인 방법을 제시하지 않았습니다.
오버로딩은 작동하지만 내가 좋아하는 것만 큼 깨끗하게 보이지 않으므로 해결 방법이나 아이디어를 주시면 감사하겠습니다.
방법이 있지만 acn은 one
선택적 매개 변수 만 제공합니다 . 그 방법은 ...
매개 변수 유형 앞에 사용하는 것 입니다.
예 :
public void ex1(int someint, String... in)){
이 경우 String in
제공 할 수 있거나 제공하지 않을 수있는 선택적 매개 변수입니다. 그러나 int someint
반드시 제공해야하는 매개 변수입니다.
그래서 String... in
기본적으로 String[] in
. 배열이 null 일 수 있기 때문에 .... 이것 외에는 (적어도 나는) 이것을 달성하는 다른 방법을 모릅니다.
즉 , 매개 변수 중 하나를 입력해야하고 다른 매개 변수는 무시할 수있는 것과 같은 작업도 수행 할 수 없습니다 . 하나의 매개 변수 만 무시하고 다른 매개 변수는 전달해야합니다.
또한 이것은 메소드 당 하나의 매개 변수로만 작동합니다. 즉, 하나의 매개 변수 만 선택 사항으로 만들 수 있습니다. 그렇지 않으면 메서드 오버로딩을 사용해야합니다.
그러나 (의견에서 언급했듯이) 이것은 효과적인 방법이 아닙니다. 각 변수의 가능성에 대한 논리를 작성해야하기 때문에 메서드 오버로딩에 의한 달콤하고 효과적인 방법에 비해 코드가 엉망이 될 것입니다.
편집하다:
varargs (또는이 선택적 매개 변수)는 method의 마지막 매개 변수로 나타나야합니다. 이것을 지적 해 주신 @Makoto에게 감사드립니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다