언어

MethodHandles.IteratedLoop(MethodHandle, MethodHandle, MethodHandle) 메서드

정의

에 의해 생성된 값에 걸쳐 범위가 지정되는 루프를 Iterator<T>생성합니다.

[Android.Runtime.Register("iteratedLoop", "(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle;", "", ApiSince=33)]
public static Java.Lang.Invoke.MethodHandle? IteratedLoop(Java.Lang.Invoke.MethodHandle? iterator, Java.Lang.Invoke.MethodHandle? init, Java.Lang.Invoke.MethodHandle? body);
[<Android.Runtime.Register("iteratedLoop", "(Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/MethodHandle;", "", ApiSince=33)>]
static member IteratedLoop : Java.Lang.Invoke.MethodHandle * Java.Lang.Invoke.MethodHandle * Java.Lang.Invoke.MethodHandle -> Java.Lang.Invoke.MethodHandle

매개 변수

iterator
MethodHandle

반복기를 반환하여 루프를 시작하는 선택적 핸들입니다. 비이null면 핸들이 반환 java.util.Iterator 되거나 하위 형식이어야 합니다. 다른 제약 조건은 위의 내용을 참조하세요.

init
MethodHandle

루프 변수의 초기 값을 제공하는 선택적 이니셜라이저입니다. 기본 초기 값을 의미하는 것일 null수 있습니다. 다른 제약 조건은 위의 내용을 참조하세요.

body
MethodHandle

루프의 본문이며, 그렇지 않을 null수 있습니다. 표준 사례에서 루프 매개 변수 및 결과 형식을 제어합니다(자세한 내용은 위 참조). 자체 반환 형식(void가 아닌 경우)과 매개 변수(반복된 값의 경우) T 를 허용해야 하며, 추가 형식 수를 허용할 수 있습니다. 다른 제약 조건은 위의 내용을 참조하세요.

반품

반복 루프 기능을 구현하는 메서드 핸들입니다.

특성

설명

에 의해 생성된 값에 걸쳐 범위가 지정되는 루프를 Iterator<T>생성합니다. 이는 #loop(MethodHandle[][]) 제네릭 루프 결합자에 대한 편리한 래퍼입니다.

반복기 자체는 핸들의 iterator 평가에 의해 결정됩니다. 생성하는 각 값은 형식 T의 루프 반복 변수에 저장됩니다.

핸들이 body 비 형식void 을 반환하는 경우 해당 형식 V의 선행 루프 반복 변수도 존재합니다. 이 변수는 선택적 init 핸들을 사용하여 초기화되거나 해당 핸들이 #empty 경우 형식 V 의 기본값으로 초기화됩니다 null.

각 반복에서 반복 변수는 핸들의 호출 body 에 전달됩니다. 본문(형식V)에서 반환된 값이 아닌void 값은 선행 반복 변수를 업데이트합니다. 루프 핸들 실행의 결과는 해당 변수의 최종 V 값이 됩니다(또는 void 변수가 없는 V 경우).

인수 핸들에 대한 다음 규칙 보존:<ul><li>핸들은 body 안 됩니다null. 해당 형식은 형식이어야 합니다. 그렇지 V 않으면 형식(V T A...)V이어야void(T A...)void 합니다. (이 경우 이름에 형식을 할당하고 (V T A...)V 형식이 voidV 매개 변수 목록에서 조용히 삭제되고 .(T A...)V) <voidvoidVli>본문의 매개 변수 목록은 (V T A...) em>내부 매개 변수 목록/em이라는 <형식 목록에< 기여합니다>. 다른 루프 파트의 매개 변수 목록을 제한합니다. <li>특수한 경우, 본문이 추가 A 형식 없이만 V 기여하고 T 형식을 지정하는 경우 내부 매개 변수 목록은 핸들의 iterator 인수 형식 A... 에 의해 확장됩니다. 단일 형식 Iterablenull 추가되고 목록을 구성하는 A... 경우입니다. <li>반복 변수 형식 (V T) 을 내부 매개 변수 목록에서 삭제하면 결과 짧은 목록을 (A...) em>외부 매개 변수 목록</em>이라고 합니다<. <li>본문 반환 형식 V이 아닌void 경우 루프의 추가 상태 변수 형식을 결정합니다. 본문은 선행 매개 변수를 수락하고 이 형식 V의 값을 반환해야 합니다. <li>가 아닌null 경우 init 반환 형식V이 있어야 합니다. 해당 매개 변수 목록(일부 형식 <c>(A*)</c>)은 외부 매개 변수 목록 (A...)과 효과적으로 동일해야 합니다. <li>If이nullinit 루프 변수가 #empty 기본값으로 초기화됩니다. <li>핸들이 iterator 아닌null 경우 반환 형식 또는 해당 하위 형식 java.util.Iterator 이 있어야 합니다. 루프가 실행될 때 생성하는 반복기는 형식 T으로 변환할 수 있는 값을 생성하는 것으로 간주됩니다. <li>비-null(일부 형식(A*)의) 매개 변수 목록은 iterator 외부 매개 변수 목록(A...)과 효과적으로 동일해야 합니다. <li>If iteratornull 기본적으로 다음과 같이 java.lang.Iterable#iterator()동작하는 메서드 핸들로 설정됩니다. 이 경우 내부 매개 변수 목록에 (V T A...) 는 하나 A 이상의 형식이 있어야 하며 기본 반복기 핸들 매개 변수는 변환 방법을 사용하는 MethodHandle#asType asType 것처럼 선행 A 형식을 허용하도록 조정됩니다. 선행 A 형식 또는 해당 하위 형식이어야 Iterable 합니다. 루프 생성 시 수행되는 이 변환 단계는 을 WrongMethodTypeExceptionthrow해서는 안 됩니다. </ul>

형식 T 은 기본 형식 또는 참조일 수 있습니다. 메서드 핸들 표현에서 원시 형식 iteratedLoopIterator에 대한 형식 Iterator<T> 이 지워지므로 결합자는 변환 메서드에 의한 MethodHandle#asType asType 것처럼 선행 인수 형식 bodyObject 조정합니다. 따라서 루프가 실행될 때 잘못된 형식의 반복기가 나타나면 런타임 예외가 수행된 MethodHandle#asType(MethodType)동적 변환의 결과로 발생할 수 있습니다.

결과 루프 핸들의 결과 형식 및 매개 변수 서명은 다음과< 같이 결정됩니다. ul><li>루프 핸들의 결과 형식은 본문의 결과 형식 V 입니다. <li>루프 핸들의 매개 변수 형식은 외부 매개 변수 목록의 형식 (A...)입니다. </ul>

결과 루프 핸들에 대한 의사 코드는 다음과 같습니다. 코드 V/v 에서 루프 변수의 형식/값과 루프의 결과 형식을 나타냅니다. 루프 T/t가 반복하는 구조체 요소의 형식이며 A.../a... 루프에 전달된 인수를 나타냅니다. <blockquote>

{@code
            Iterator<T> iterator(A...);  // defaults to Iterable::iterator
            V init(A...);
            V body(V,T,A...);
            V iteratedLoop(A... a...) {
              Iterator<T> it = iterator(a...);
              V v = init(a...);
              while (it.hasNext()) {
                T t = it.next();
                v = body(v, t, a...);
              }
              return v;
            }
            }

</blockquote>

9에 추가되었습니다.

에 대한 java.lang.invoke.MethodHandles.iteratedLoop(java.lang.invoke.MethodHandle, java.lang.invoke.MethodHandle, java.lang.invoke.MethodHandle)Java 설명서

이 페이지의 일부는 만들고 공유한 작업을 기반으로 하며 에 설명된 조건에 따라 사용됩니다.

적용 대상