내가 관리하고있는 코드에서이 클래스를 만났다 :
new GenericFutureListener<Future<? super Void>>() {...}
이것이 무엇을 의미하는지 이해하는데 정말 어려움을 겪고 있습니다.
Future
Void
유형을 포함
또는 수퍼 클래스-
Object
. 왜 그냥
Future<Object>
를 쓰지 않습니까?
?
- 답변 # 1
- 답변 # 2
아무도 지적하지 않은 사람은 Netty이며 https://netty.io/4.0/api/io/netty/util/concurrent/class-use/Future를 보면 .html 라이브러리에서 이러한 유형을 취하는 몇 가지 방법이 있습니다. 와이즈 비즈 . 그리고 이러한 메소드에는 일반적인 경우 때문에이 서명이 있습니다.
ChannelPromise.addListener(GenericFutureListener<? extends Future<? super java.lang.Void>> listener)
. 와이즈 비즈 단지Future.addListener(GenericFutureListener<? extends Future<? super V>> listener)
를 확장 .일반적인 경우는 1이기 때문에 의미가 있습니다. , 그것은 어떤
ChannelPromise
를 처리 할 수 있습니다 미래가 완료되면 가치;2.Future<Void>
이후FutureListener<Future<Object>>
입니다 그것은Object
를 처리 할 수 있습니다 . 따라서 그것은V
를들을 수 있습니다 . 분명히Object
의 모든 수퍼 타입에 대해서도 마찬가지입니다.V
대신 .물론 자바가 선언-사이트 차이를 가지고 있다면이 서명은 훨씬 더 단순 할 것입니다. 그러나 곧 그렇게되지는 않을 것입니다.
- 답변 # 3
알다시피,이
Future<V>
공허의 미래 일 수도 있고,V
일 수도 있습니다. 미래.그러나 :
와이즈 비즈개발자의 의도는 "리스너"가 액션을 무효로하는 것을 거의 확실하게 제한하는 것이었다. 그러나
Object
를 허용한다면 그런 다음 다른 유형을Future<? super Void>
로 사용할 수 있습니다.Object
때문에So why not just write Future?
Future<Object>
Future
되고 클래스는 자식 클래스를 허용하지 않습니다.이 클래스는Future<Object>
를 호출하는 데 실질적인 가치가 없다면 무효화 조치로 거의 완전히 제한합니다. 미래의 결과를 설정할 때) - 답변 # 4
예,
이것을 pyzwyz로 선언 리스너가 결과로 무언가를 수행한다는 인상을줍니다.String
를 사용할 수 있습니다 리스너를 사용하지만리스너가 결과를 사용하지 않아야한다는 것을 선언합니다. - 답변 # 5
때때로 우리는 작업의 수행 여부에만 관심을 갖습니다.
나 같은 사람은
java.lang.Void
를 반환하는 것을 선호 할 수 있습니다 작업 결과가 없음을 나타냅니다.다른 사람이
final
를 사용하는 것을 선호 할 수 있지만 또는new Object()
Future<Object>
를 사용하십시오. 결과적으로.이 남자는 둘 다
GenericFutureListener<Future<Object>>
를 만났다 그리고Future<Void>
. 그래서 그는Future<Object>
를 사용합니다 두 가지를 모두 적용 할 수 있습니다.Future<?>
관련 자료
- python - '\' ' \'및 '\'는 무엇입니까 SQL 연금술의 맥락에서 의미 하는가?
- symfony - "|"는 무엇을 의미합니까?
- python - 의 의미는 무엇입니까? 수입?
- shell - bash에서 triple-single-quote은 무엇을 의미합니까?
- python - cv2resize에서 None은 무엇을 의미합니까?
- assembly - 지점 벌금이란 무엇입니까?
- c - 차단 모드 란 무엇입니까?
- bash 스크립팅에서 # +는 무엇을 의미합니까?
- docker - "정중하게 멈추다"는 무슨 뜻입니까
- bash에서"${file % *}"의 의미
- PHP가 HTML/PHP 태그를 "상태"로 나타낼 때 무엇을 의미합니까?
- c# - ServiceBase의 ctor를 "재정의"한다는 것은 무엇을 의미합니까?
- oracle - 동적 sql에서 - 1의 의미
- shell - $(1 - d =) 무엇을 의미합니까?
- c# - 이것은 "감지 된 시간 복잡도 - o (y-x)"는 무엇을 의미합니까?
- android - Kotlin에서`this @ classname`은 무엇을 의미합니까?
- ruby - 방법 축소에서 - ^은 무슨 뜻입니까?
- python - 함수 이름에서 는 무엇을 의미합니까?
- haskell - `$`는 map 함수의 인수로 사용될 때 무엇을 의미합니까?
- 이것은 x86 어셈블리 코드가 무엇을 의미합니까?
GenericFutureListener<Future<? super T>>
와 같은 일반적인 유형을 따르기 위해 생성 된 것 같습니다.GenericFutureListener<Future<Void>>
를 사용할 수있을만큼 유연하지 않습니다. 혼자.예를 들어 다음과 같은 것이 있다면 :
GenericFutureListener<Future<Void>>
에 전달 허용되지 않습니다.