[java] 배열을 인라인으로 선언하는 방법이 있습니까?

문자열 배열을 인수로 취하는 메소드 m ()이 있다고 가정 해 봅시다. 전화를 걸 때이 배열을 인라인으로 선언 할 수있는 방법이 있습니까? 즉 :

String[] strs = {"blah", "hey", "yo"};
m(strs);

이것을 한 줄로 바꾸고 절대 사용하지 않을 명명 된 변수를 선언하지 않아도됩니까?



답변

m(new String[]{"blah", "hey", "yo"});


답변

Draemon이 맞습니다. varargsm 를 사용하는 것으로 선언 할 수도 있습니다 .

void m(String... strs) {
    // strs is seen as a normal String[] inside the method
}

m("blah", "hey", "yo"); // no [] or {} needed; each string is a separate arg here


답변

결과를 List 인라인으로 사용하려면 다음과 같이 할 수 있습니다.

Arrays.asList(new String[] { "String1", "string2" });


답변

이니셜 라이저없이 최신 Java로 어레이를 직접 작성할 수 있습니다. 귀하의 예는 이제 유효합니다. 어쨌든 매개 변수의 이름을 지정하는 것이 가장 좋습니다.

String[] array = {"blah", "hey", "yo"};

또는

int[] array = {1, 2, 3};

이 경우 인라인에, 당신은 유형을 선언해야합니다 :

functionCall(new String[]{"blah", "hey", "yo"});

또는 varargs (가변 인수)를 사용하십시오.

void functionCall(String...stringArray) {
    // Becomes a String[] containing any number of items or empty
}

functionCall("blah", "hey", "yo");

Java 개발자가 향후 암시 적 초기화를 허용 할 수 있기를 바랍니다.

업데이트 : Kotlin Answer

Kotlin은 배열 작업을 훨씬 쉽게 해주었습니다 . 대부분의 유형의 경우 그냥 사용 arrayOf하면 암시 적으로 유형이 결정됩니다. 아무것도 비워 두지 마십시오.

arrayOf("1", "2", "3") // String
arrayOf(1, 2, 3)       // Int
arrayOf(1, 2, "foo")   // Any 
arrayOf<Int>(1, 2, 3)  // Set explict type
arrayOf<String>()      // Empty String array

프리미티브에는 유틸리티 기능이 있습니다. 아무것도 비워 두지 마십시오.

intArrayOf(1, 2, 3)
charArrayOf()
booleanArrayOf()
longArrayOf()
shortArrayOf()
byteArrayOf()

이미 a를 가지고 Collection배열을 인라인으로 변환하려면 다음을 사용하십시오.

collection.toTypedArray()

배열 유형을 강제해야하는 경우 다음을 사용하십시오.

array.toIntArray()
array.toLongArray()
array.toCharArray()
...


답변

어딘가에 메소드를 작성할 수 있습니다

public static <T> T[] toArray(T... ts) {
    return ts;
}

그런 다음 사용하십시오

m(toArray("blah", "hey", "yo"));

더 나은 모습.


답변

배열 초기화 구문이 간결하고 유연하다는 것을 추가하고 싶습니다. 나는 그것을 코드를 사용하여 코드에서 데이터를 추출하고 더 유용한 곳에 배치합니다.

예를 들어, 나는 종종 다음과 같은 메뉴를 만들었습니다 :

Menu menu=initMenus(menuHandler, new String[]{"File", "+Save", "+Load", "Edit", "+Copy", ...});

이를 통해 메뉴 시스템을 설정하기위한 come 코드를 작성할 수 있습니다. “+”는 이전 항목 아래에 해당 항목을 배치하기에 충분합니다.

“menuFile, menuFileSave, menuFileLoad, …”와 같은 메소드의 이름을 지정하고이를 반사적으로 바인딩하여 (다른 대안이 있음) 메소드 이름 지정 규칙으로 menuHandler 클래스에 바인딩 할 수 있습니다.

이 구문은 놀랍도록 간단한 메뉴 정의와 매우 재사용 가능한 “initMenus”메소드를 허용합니다. (그래서 작성하는 것이 항상 즐겁고 몇 분 + 몇 줄의 코드 만 필요하기 때문에 재사용하지 않아도됩니다).

코드에서 패턴을 볼 때마다 이와 같은 패턴으로 바꿀 수 있는지 확인하고 배열 초기화 구문이 얼마나 간결한 지 항상 기억하십시오.


답변

다른 옵션은 org.apache.commons.lang3에서 ArrayUtils.toArray를 사용하는 것입니다

ArrayUtils.toArray("elem1","elem2")