>  기사  >  백엔드 개발  >  런타임에 일반 유형이 "비교 가능"한지 확인하는 방법은 무엇입니까?

런타임에 일반 유형이 "비교 가능"한지 확인하는 방법은 무엇입니까?

WBOY
WBOY앞으로
2024-02-05 21:54:03543검색

런타임에 일반 유형이 비교 가능한지 확인하는 방법은 무엇입니까?

질문 내용

다음과 같이 작동하는 일반적인 equals 메소드를 작성하고 싶습니다.

으아아아

이를 위해 인터페이스를 만들었습니다. comparable:

으아아아

equals 매개변수가 다음과 같이 이 comparable 인터페이스를 구현하는지 확인할 수 있습니다.

으아아아

그러나 지금까지는 aa 是否也满足 comparable 约束并将其转换为可以使用 == 제약 조건도 충족하는지 확인하고 이를 ==를 사용할 수 있는 것으로 변환하는 것이 불가능하다는 것을 알았습니다.

런타임에 제네릭 유형 T anyT any 在运行时是否是 comparable ,如果是,则使用 ==인지 확인하고 그렇다면 ==를 사용하여 비교하는 방법이 있나요?

전체 코드를 comparable 泛型类型,但我想让用户可以手动添加 equals 方法,如果他们的类型恰好不是 comparable (例如,因为它基于切片) )。


正确答案


如果它使用相等运算符进行编译,则它是可比较的。受 any 约束的类型参数在定义上是不可比较的:它实际上可以是任何内容,包括 func() error 일반 유형에서만 작동하도록 제한할 수 있지만 유형이

이외의 유형인 경우(예: 슬라이스 기반이기 때문에) 사용자가

메소드를 수동으로 추가할 수 있도록 허용하고 싶습니다. equals 函数。您必须使用反射或仅接受实现“相等”接口的参数,例如您自己的 Comparable[T any]

정답

항등 연산자를 사용하여 컴파일하면 비교 가능합니다. any가 적용되는 유형 매개변수는 정의상 비교할 수 없습니다. func() 오류를 포함하여 사실상 모든 것이 될 수 있습니다. Value#Comparable 따라서 정적 유형을 사용하여

함수를 작성하는 것은 불가능합니다. 리플렉션을 사용하거나 자신의 Comparable[T any]와 같은 "동등성" 인터페이스를 구현하는 매개변수만 허용해야 합니다.

ab 具有相同的确切类型,因此 v.Equal(u) 不是毫无意义的,而不是声明 equals(a, b any) 리플렉션을 사용하면

:🎜을 사용할 수 있습니다. 으아아아 🎜이 경우 제네릭을 사용하면 컴파일 타임에 🎜를 보장하는 데 도움이 될 수 있습니다. 🎜 🎜"equaler" 인터페이스를 사용하면 미리 선언된 유형을 변환하고 해당 메서드를 호출하려면 이를 구현하는 명명된 유형을 제공해야 합니다. 🎜 으아아아

위 내용은 런타임에 일반 유형이 "비교 가능"한지 확인하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제