ホームページ  >  記事  >  バックエンド開発  >  実行時にジェネリック型が「比較可能」かどうかを判断するにはどうすればよいですか?

実行時にジェネリック型が「比較可能」かどうかを判断するにはどうすればよいですか?

WBOY
WBOY転載
2024-02-05 21:54:03574ブラウズ

実行時にジェネリック型が「比較可能」かどうかを判断するにはどうすればよいですか?

質問の内容

次のように動作する一般的な equals メソッドを書きたいと考えています。 リーリー

このために、インターフェイス

comparable: を作成しました。 リーリー

equals のパラメータがこの

comparable インターフェイスを実装しているかどうかは、次のように確認できます。 リーリー ただし、これまでのところ、

a

comparable 制約も満たしているかどうかを確認し、それを == を使用できるものに変換することは不可能であることがわかりました。 。

ジェネリック型

T any が実行時に comparable であるかどうかを確認する方法はありますか?そうであれば、比較に == を使用します? コード全体を

comparable

ジェネリック型でのみ動作するように制限することもできますが、型がたまたま何かの場合にユーザーが手動で equals メソッドを追加できるようにしたいと考えています。 比較可能な 以外 (例: スライスに基づいているため))。

正解

等価演算子を使用してコンパイルすると比較可能です。
any

の対象となる型パラメータは、定義上、比類のないものです。func() エラー を含め、事実上何でも構いません。 したがって、静的型を使用して

equals

関数を記述することは不可能です。リフレクションを使用するか、独自の Comparable[T any] などの「等価」インターフェイスを実装するパラメーターのみを受け入れる必要があります。 リフレクションを使用すると、

Value#Comparable: を使用できます。 リーリー この場合、ジェネリックスを使用すると、コンパイル時に

a

b が正確に同じ型であることを確認できるため、v.Equal(u) はそうではありません。 equals(a, b any) を宣言する代わりに、無意味です。 「equaler」インターフェイスを使用すると、事前に宣言された型を変換してそのメソッドを呼び出すために、それを実装する名前付き型を提供する必要があります。

リーリー

以上が実行時にジェネリック型が「比較可能」かどうかを判断するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。