MethodHandles.IteratedLoop(MethodHandle, MethodHandle, MethodHandle) 메서드
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
에 의해 생성된 값에 걸쳐 범위가 지정되는 루프를 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... 에 의해 확장됩니다. 단일 형식 Iterable 이 null 추가되고 목록을 구성하는 A... 경우입니다.
<li>반복 변수 형식 (V T) 을 내부 매개 변수 목록에서 삭제하면 결과 짧은 목록을 (A...) em>외부 매개 변수 목록</em>이라고 합니다<.
<li>본문 반환 형식 V이 아닌void 경우 루프의 추가 상태 변수 형식을 결정합니다. 본문은 선행 매개 변수를 수락하고 이 형식 V의 값을 반환해야 합니다.
<li>가 아닌null 경우 init 반환 형식V이 있어야 합니다. 해당 매개 변수 목록(일부 형식 <c>(A*)</c>)은 외부 매개 변수 목록 (A...)과 효과적으로 동일해야 합니다.
<li>If이null면 init 루프 변수가 #empty 기본값으로 초기화됩니다.
<li>핸들이 iterator 아닌null 경우 반환 형식 또는 해당 하위 형식 java.util.Iterator 이 있어야 합니다. 루프가 실행될 때 생성하는 반복기는 형식 T으로 변환할 수 있는 값을 생성하는 것으로 간주됩니다.
<li>비-null(일부 형식(A*)의) 매개 변수 목록은 iterator 외부 매개 변수 목록(A...)과 효과적으로 동일해야 합니다.
<li>If iterator 는 null 기본적으로 다음과 같이 java.lang.Iterable#iterator()동작하는 메서드 핸들로 설정됩니다. 이 경우 내부 매개 변수 목록에 (V T A...) 는 하나 A 이상의 형식이 있어야 하며 기본 반복기 핸들 매개 변수는 변환 방법을 사용하는 MethodHandle#asType asType 것처럼 선행 A 형식을 허용하도록 조정됩니다. 선행 A 형식 또는 해당 하위 형식이어야 Iterable 합니다. 루프 생성 시 수행되는 이 변환 단계는 을 WrongMethodTypeExceptionthrow해서는 안 됩니다.
</ul>
형식 T 은 기본 형식 또는 참조일 수 있습니다. 메서드 핸들 표현에서 원시 형식 iteratedLoopIterator에 대한 형식 Iterator<T> 이 지워지므로 결합자는 변환 메서드에 의한 MethodHandle#asType asType 것처럼 선행 인수 형식 body 을 Object 조정합니다. 따라서 루프가 실행될 때 잘못된 형식의 반복기가 나타나면 런타임 예외가 수행된 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에 추가되었습니다.
이 페이지의 일부는 만들고 공유한 작업을 기반으로 하며 에 설명된 조건에 따라 사용됩니다.