String [] args vs (문자열... args)


9

안드로이드를 프로그래밍 할 때 AsyncTask를 사용할 때마다 doInBackground 메소드는 다음과 같습니다.

 protected String doInBackground(String... args)

그러나 해당 블록의 어느 곳에서나 인수를 사용할 때 예를 들어 내 프로그램에서 일반 문자열 배열처럼 액세스 할 수 있습니다

        @Override
    protected String doInBackground(String... args)
    {
        String details = "";
        try
        {
            details = facade.getRecipeDetails(args[0]);
        }
        catch(Exception ex)
        {
            ex.printStackTrace();
        }
        return details;
    }

어느 것이 잘 작동하며 처리하는 데 아무런 문제가 없습니다. 그러나 왜 일반 문자열 배열 대신 (String.. args)를 사용하는지 궁금합니다. 호출 메소드에서 다음과 같이 작성할 수 있기 때문입니다.

 new AsyncHandler.execute("argument1","argument2","argument3",...)  

인수를 전달할 새 배열을 만드는 대신? 우리는 쓸 수 있지만

new AsyncHandler().execute(new String[]{"Argument1","Argument2"});

조금 더 장황하다.

(String ...) 및 String []은 작동 방식에 동의어이지만 배열을 만들 필요가 없기 때문에 인수 전달이 전자를 사용하는 것이 더 쉽습니다? 내가 알 수있는 한 전자는 백그라운드에서 문자열 배열로 변환되므로 동일한 코드로 컴파일되고 '구문 설탕'입니까?


(String ...)String원하는 만큼 많은 매개 변수를 추가 할 수 있음을 의미 String[]하며 문자열 배열 인 하나의 매개 변수입니다. (String ...)의 첫 번째 매개 변수에 따라 AsyncTask항상 그렇지는 않습니다 String.
FaizanRabbani

당신은 또한 전화를 수 있다는 점을 제외하고 @FaizanRabbani String...그건 마치String[]
래칫 괴물

@ratchetfreak 그렇다. 이것은 a 역할을 할 수 String[]있지만 기본적으로 가정한다 String[]. String배열에서 다른 매개 변수 를 사용하는 것은 상당히 문제가되었을 것 입니다. 대신에 그들은 유연성을 부여했다 (String ...).
FaizanRabbani

@FaizanRabbani 나는 그것이 항상 문자열이 아니라는 것을 알고 있습니다. 단지 예제 =)입니다. Boolean ... 또는 다른 것들도 마찬가지이지만, 우리가 익숙한 main (String [] args) 때문에 String을 사용하는 것을 좋아했습니다. 그리고 당신은 '원하는만큼 많은 문자열을 전달할 수 있습니다'라고 말했는데, 배열로 꽤 많은 문자열을 전달할 수 있습니다. 나에게는 여전히 배열을 사용하여 동일한 결과를 얻을 수있는 것처럼 보이지만 읽기 어렵고 번거 로움이 더 많습니다. 예를 들어 배열 배열을 전달하면 가독성이 약간 떨어집니다. 주로 가독성을위한 것입니까? (감사합니다 btw)
Dylan Meeus

@FaizanRabbani 잘은 간단한 포장의 new String[]{...}변환에 (실제로 당신이 사용할 때 발생하는 상황 String...)
래칫 괴물

답변:


15

(String ...)파라미터의 어레이String으로, String[]단일 매개 변수 .

이제 여기 String[]에서 동일한 목적을 완전히 채울 수 있지만 (String ...)더 읽기 쉽고 사용하기 쉽습니다.

또한를 String사용하여 단일 배열이 아닌 여러 배열을 전달할 수있는 옵션도 제공합니다 String[].


1
매개 변수 String[]로 사용하는 메소드에 전달 될 수는 있지만 String...두 개 String[]는 할 수 없습니다. 여기서 발생하는 암시 적 배열 연결은 없습니다.

5

String [] vs String ...의 기능은 "String ..."이 호출의 일부일 필요는 없다는 것입니다.

public void test(String... args){ 
   if(args.length > 0){
      for( String text : args){
         System.out.println(text);
      }
   }else{
      System.out.println("No args defined.");
   }
}

public void callerTest(){
     test();
     System.out.println();

     test("tree");
     System.out.println();

     test("dog", "cat", "pigeon");
}

그런 다음 호출 callerTest();하면 출력은 다음과 같습니다.

No args defined.

tree

dog
cat
pigeon
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.