クラス TypeDescriptor

java.lang.ObjectSE
org.springframework.core.convert.TypeDescriptor
実装されたすべてのインターフェース:
SerializableSE

public class TypeDescriptor extends ObjectSE implements SerializableSE
変換元または変換先の型に関するコンテキスト記述子。

配列とジェネリクスコレクション型を表すことができます。

導入:
3.0
作成者:
Keith Donald, Andy Clement, Juergen Hoeller, Phillip Webb, Sam Brannen, Stephane Nicoll
関連事項:
  • コンストラクターの詳細

    • TypeDescriptor

      public TypeDescriptor(MethodParameter methodParameter)
      MethodParameter から新しい型記述子を作成します。

      ソースまたはターゲットの変換ポイントがコンストラクターパラメーター、メソッドパラメーター、メソッドの戻り値である場合、このコンストラクターを使用します。

      パラメーター:
      methodParameter - メソッドパラメーター
    • TypeDescriptor

      public TypeDescriptor(FieldSE field)
      FieldSE から新しい型記述子を作成します。

      ソースまたはターゲットの変換ポイントがフィールドの場合、このコンストラクターを使用します。

      パラメーター:
      field - フィールド
    • TypeDescriptor

      public TypeDescriptor(Property property)
      Property から新しい型記述子を作成します。

      このコンストラクターは、ソースまたはターゲットの変換ポイントが Java クラスのプロパティである場合に使用します。

      パラメーター:
      property - プロパティ
    • TypeDescriptor

      public TypeDescriptor(ResolvableType resolvableType, @Nullable ClassSE<?> type, @Nullable AnnotationSE[] annotations)
      ResolvableType から新しい型記述子を作成します。

      このコンストラクターは内部で使用され、拡張型システムで非 Java 言語をサポートするサブクラスでも使用できます。5.1.4 の時点では公開されていますが、以前は保護されていました。

      パラメーター:
      resolvableType - 解決可能な型
      type - バッキング型 (解決する必要がある場合は null )
      annotations - 型アノテーション
      導入:
      4.0
  • メソッドの詳細

    • getObjectType

      public ClassSE<?> getObjectType()
      オブジェクトラッパー型を返すことでプリミティブ型を説明する getType() のバリエーション。

      これは、オブジェクトベースの型に正規化し、プリミティブ型を直接処理しない変換サービスの実装に役立ちます。

    • getType

      public ClassSE<?> getType()
      この TypeDescriptor によって記述されるバッキングクラス、メソッドパラメーター、フィールド、プロパティの型。

      プリミティブ型をそのまま返します。必要に応じてプリミティブ型を対応するオブジェクト型に解決するこの操作のバリエーションについては、getObjectType() を参照してください。

      関連事項:
    • getResolvableType

      public ResolvableType getResolvableType()
      基本となる ResolvableType を返します。
      導入:
      4.0
    • getSource

      public ObjectSE getSource()
      記述子の基になるソースを返します。TypeDescriptor の構築方法に応じて、FieldSEMethodParameterTypeSE を返します。このメソッドは主に、代替の JVM 言語が提供する可能性がある追加の型情報またはメタデータへのアクセスを提供するためのものです。
      導入:
      4.0
    • nested

      @Nullable public TypeDescriptor nested(int nestingLevel)
      この記述子内で宣言されたネストされた型の型記述子を作成します。
      パラメーター:
      nestingLevel - プロパティ内のコレクション / 配列要素またはマップキー / 値宣言のネストレベル
      戻り値:
      指定されたネストレベルのネストされた型記述子、または取得できなかった場合は null 
      導入:
      6.1
    • narrow

      public TypeDescriptor narrow(@Nullable ObjectSE value)
      型を提供された値のクラスに設定することにより、この TypeDescriptor を狭めます。

      値が null の場合、ナローイングは実行されず、この TypeDescriptor は変更されずに返されます。

      プロパティ、フィールド、メソッドの戻り値を読み取るときに、バインディングフレームワークによって呼び出されるように設計されています。このようなフレームワークは、宣言されたプロパティ、フィールド、メソッドの戻り値の型から構築された TypeDescriptor を狭めることができます。例: java.lang.Object として宣言されたフィールドは、java.util.HashMap 値に設定されている場合、java.util.HashMap に狭められます。狭められた TypeDescriptor を使用して、HashMap を他の型に変換できます。アノテーションとネストされた型のコンテキストは、狭められたコピーによって保持されます。

      パラメーター:
      value - この型記述子を絞り込むために使用する値
      戻り値:
      この TypeDescriptor は狭くなった (型が提供された値のクラスに更新されたコピーを返します)
    • upcast

      @Nullable public TypeDescriptor upcast(@Nullable ClassSE<?> superType)
      この TypeDescriptor を、アノテーションとネストされた型コンテキストを保持するスーパークラスまたは実装されたインターフェースにキャストします。
      パラメーター:
      superType - キャストするスーパー型 (null にすることができます)
      戻り値:
      アップキャスト型の新しい TypeDescriptor
      例外:
      IllegalArgumentExceptionSE - この型をスーパー型に割り当てることができない場合
      導入:
      3.2
    • getName

      public StringSE getName()
      この型の名前、つまり完全修飾クラス名を返します。
    • isPrimitive

      public boolean isPrimitive()
      この型はプリミティブ型ですか?
    • getAnnotations

      public AnnotationSE[] getAnnotations()
      この型記述子に関連付けられているアノテーションがあれば、それを返します。
      戻り値:
      アノテーション、ない場合は空の配列
    • hasAnnotation

      public boolean hasAnnotation(ClassSE<? extends AnnotationSE> annotationType)
      この型記述子に指定されたアノテーションがあるかどうかを確認します。

      Spring Framework 4.2 以降、このメソッドは任意のレベルのメタアノテーションをサポートします。

      パラメーター:
      annotationType - アノテーション型
      戻り値:
      アノテーションが存在する場合は true 
    • getAnnotation

      @Nullable public <T extends AnnotationSE> T getAnnotation(ClassSE<T> annotationType)
      この型記述子にある指定された annotationType のアノテーションを取得します。

      Spring Framework 4.2 以降、このメソッドは任意のレベルのメタアノテーションをサポートします。

      パラメーター:
      annotationType - アノテーション型
      戻り値:
      アノテーション、またはこの型記述子にそのようなアノテーションが存在しない場合は null 
    • isAssignableTo

      public boolean isAssignableTo(TypeDescriptor typeDescriptor)
      この型記述子のオブジェクトを、指定された型記述子で記述された場所に割り当てることができる場合は true を返します。

      例: 文字列値を CharSequence 変数に割り当てることができるため、valueOf(String.class).isAssignableTo(valueOf(CharSequence.class)) は true を返します。一方、valueOf(Number.class).isAssignableTo(valueOf(Integer.class)) は false を返します。これは、すべての整数は数値ですが、すべての数値が整数ではないためです。

      配列、コレクション、マップの場合、要素とキー / 値の型が宣言されているかどうかがチェックされます。例: List<String> フィールド値は Collection<CharSequence> フィールドに割り当て可能ですが、List<Number> は List<Integer> に割り当て可能ではありません。

      戻り値:
      true (この型が、提供された型記述子によって表される型に割り当て可能な場合)
      関連事項:
    • isCollection

      public boolean isCollection()
      この型は CollectionSE 型ですか?
    • isArray

      public boolean isArray()
      この型は配列型ですか?
    • getElementTypeDescriptor

      @Nullable public TypeDescriptor getElementTypeDescriptor()
      この型が配列の場合、配列のコンポーネント型を返します。この型が Stream の場合、ストリームのコンポーネント型を返します。この型が CollectionSE であり、パラメーター化されている場合、コレクションの要素型を返します。コレクションがパラメーター化されていない場合、要素型が宣言されていないことを示す null を返します。
      戻り値:
      配列コンポーネント型またはコレクション要素型。この型が配列型または java.util.Collection でない場合、またはその要素型がパラメーター化されていない場合は null 
      関連事項:
    • elementTypeDescriptor

      @Nullable public TypeDescriptor elementTypeDescriptor(ObjectSE element)
      この型が CollectionSE または配列の場合、提供されたコレクションまたは配列要素から要素 TypeDescriptor を作成します。

      elementType プロパティを、提供されたコレクションまたは配列要素のクラスに絞り込みます。例: これが java.util.List<java.lang.Number> を記述し、要素引数が java.lang.Integer の場合、返される TypeDescriptor は java.lang.Integer になります。これが java.util.List<?> を記述し、要素引数が java.lang.Integer である場合、返される TypeDescriptor も java.lang.Integer になります。

      アノテーションとネストされた型のコンテキストは、返される狭められた TypeDescriptor に保持されます。

      パラメーター:
      element - コレクションまたは配列要素
      戻り値:
      提供された要素の型に絞り込まれた要素型記述子
      関連事項:
    • isMap

      public boolean isMap()
      この型は MapSE 型ですか?
    • getMapKeyTypeDescriptor

      @Nullable public TypeDescriptor getMapKeyTypeDescriptor()
      この型が MapSE であり、そのキー型がパラメーター化されている場合、マップのキー型を返します。マップのキー型がパラメーター化されていない場合、キー型が宣言されていないことを示す null を返します。
      戻り値:
      マップのキー型、またはこの型がマップであるがキー型がパラメーター化されていない場合は null 
      例外:
      IllegalStateExceptionSE - この型が java.util.Map でない場合
    • getMapKeyTypeDescriptor

      @Nullable public TypeDescriptor getMapKeyTypeDescriptor(ObjectSE mapKey)
      この型が MapSE の場合、指定されたマップキーから mapKey TypeDescriptor を作成します。

      mapKeyType プロパティを、提供されたマップキーのクラスに絞り込みます。例: これが java.util.Map<java.lang.Number, java.lang.String> を表し、キー引数が java.lang.Integer の場合、返される TypeDescriptor は java.lang.Integer になります。これが java.util.Map<?, ?> を表し、キー引数が java.lang.Integer の場合、返される TypeDescriptor も java.lang.Integer になります。

      アノテーションとネストされた型のコンテキストは、返される狭められた TypeDescriptor に保持されます。

      パラメーター:
      mapKey - マップキー
      戻り値:
      マップキー型記述子
      例外:
      IllegalStateExceptionSE - この型が java.util.Map でない場合
      関連事項:
    • getMapValueTypeDescriptor

      @Nullable public TypeDescriptor getMapValueTypeDescriptor()
      この型が MapSE であり、その値型がパラメーター化されている場合、マップの値型を返します。

      マップの値型がパラメーター化されていない場合、値型が宣言されていないことを示す null を返します。

      戻り値:
      マップの値型、またはこの型がマップであるがその値型がパラメーター化されていない場合は null 
      例外:
      IllegalStateExceptionSE - この型が java.util.Map でない場合
    • getMapValueTypeDescriptor

      @Nullable public TypeDescriptor getMapValueTypeDescriptor(@Nullable ObjectSE mapValue)
      この型が MapSE の場合、指定されたマップ値から mapValue TypeDescriptor を作成します。

      mapValueType プロパティを指定されたマップ値のクラスに絞り込みます。例: これが java.util.Map<java.lang.String, java.lang.Number> を表し、値の引数が java.lang.Integer の場合、返される TypeDescriptor は java.lang.Integer になります。これが java.util.Map<?, ?> を表し、引数 value が java.lang.Integer の場合、返される TypeDescriptor も java.lang.Integer になります。

      アノテーションとネストされた型のコンテキストは、返される狭められた TypeDescriptor に保持されます。

      パラメーター:
      mapValue - マップ値
      戻り値:
      マップ値型記述子
      例外:
      IllegalStateExceptionSE - この型が java.util.Map でない場合
      関連事項:
    • equals

      public boolean equals(@Nullable ObjectSE other)
      オーバーライド:
      クラス ObjectSEequalsSE 
    • hashCode

      public int hashCode()
      オーバーライド:
      クラス ObjectSEhashCode 
    • toString

      public StringSE toString()
      オーバーライド:
      クラス ObjectSEtoString 
    • forObject

      @Nullable @Contract("!null -> !null; null -> null") public static TypeDescriptor forObject(@Nullable ObjectSE source)
      オブジェクトの新しい型記述子を作成します。

      このファクトリメソッドを使用して、変換システムに他の型への変換を要求する前に、ソースオブジェクトをイントロスペクトします。

      指定されたオブジェクトが null の場合は null を返し、そうでない場合は valueOf(Class) を呼び出してオブジェクトのクラスから TypeDescriptor を構築します。

      パラメーター:
      source - ソースオブジェクト
      戻り値:
      型記述子
    • valueOf

      public static TypeDescriptor valueOf(@Nullable ClassSE<?> type)
      指定された型から新しい型記述子を作成します。

      メソッドのパラメーターやフィールドなどの型の場所が追加の変換コンテキストを提供するために使用できない場合、これを使用して、変換システムにオブジェクトを特定のターゲット型に変換するように指示します。

      null オブジェクトのケースを処理するため、ソースオブジェクトから型記述子を構築するために、forObject(Object) を使用することをお勧めします。

      パラメーター:
      type - クラス (Object.class を示す null の場合もあります)
      戻り値:
      対応する型記述子
    • collection

      public static TypeDescriptor collection(ClassSE<?> collectionType, @Nullable TypeDescriptor elementTypeDescriptor)
      CollectionSE 型から新しい型記述子を作成します。

      型付きコレクションへの変換に役立ちます。

      例: このメソッドで構築された targetType に変換することで、List<String> を List<EmailAddress> に変換できます。このような TypeDescriptor を構築するためのメソッド呼び出しは次のようになります: collection(List.class, TypeDescriptor.valueOf(EmailAddress.class));

      パラメーター:
      collectionType - コレクション型。これは CollectionSE を実装する必要があります。
      elementTypeDescriptor - コレクションの要素型の記述子。コレクション要素の変換に使用されます
      戻り値:
      コレクション型記述子
    • map

      public static TypeDescriptor map(ClassSE<?> mapType, @Nullable TypeDescriptor keyTypeDescriptor, @Nullable TypeDescriptor valueTypeDescriptor)
      MapSE 型から新しい型記述子を作成します。

      型されたマップへの変換に役立ちます。

      たとえば、Map<String, String> は、このメソッドで構築された targetType に変換することで Map<Id, EmailAddress> に変換できます。このような TypeDescriptor を構築するためのメソッド呼び出しは次のようになります。

       map(Map.class, TypeDescriptor.valueOf(Id.class), TypeDescriptor.valueOf(EmailAddress.class));
       
      パラメーター:
      mapType - MapSE を実装する必要があるマップ型
      keyTypeDescriptor - マップキーの変換に使用されるマップのキー型の記述子
      valueTypeDescriptor - マップ値の変換に使用されるマップの値型
      戻り値:
      マップ型記述子
    • array

      @Nullable @Contract("!null -> !null; null -> null") public static TypeDescriptor array(@Nullable TypeDescriptor elementTypeDescriptor)
      指定された型の配列として新しい型記述子を作成します。

      たとえば、Map<String,String>[] を作成するには、次のように使用します。

       TypeDescriptor.array(TypeDescriptor.map(Map.class, TypeDescriptor.value(String.class), TypeDescriptor.value(String.class)));
       
      パラメーター:
      elementTypeDescriptor - 配列要素の TypeDescriptor または null
      戻り値:
      elementTypeDescriptor が null の場合、配列 TypeDescriptor または null 
      導入:
      3.2.1
    • nested

      @Nullable public static TypeDescriptor nested(MethodParameter methodParameter, int nestingLevel)
      メソッドパラメーター内で宣言されたネストされた型の型記述子を作成します。

      例: methodParameter が List<String> で、ネストレベルが 1 の場合、ネストされた型記述子は String.class になります。

      methodParameter が List<List<String>> であり、ネストレベルが 2 の場合、ネストされた型記述子も String.class になります。

      methodParameter が Map<Integer, String> であり、ネストレベルが 1 の場合、ネストされた型記述子はマップ値から派生した文字列になります。

      methodParameter が List<Map<Integer, String>> であり、ネストレベルが 2 の場合、ネストされた型記述子はマップ値から派生した文字列になります。

      ネストされた型が宣言されていないため取得できない場合は、null を返します。例: メソッドパラメーターが List<?> の場合、返されるネストされた型記述子は null になります。

      パラメーター:
      methodParameter - nestingLevel が 1 のメソッドパラメーター
      nestingLevel - メソッドパラメーター内のコレクション / 配列要素またはマップキー / 値宣言のネストレベル
      戻り値:
      指定されたネストレベルのネストされた型記述子、または取得できなかった場合は null 
      例外:
      IllegalArgumentExceptionSE - 入力 MethodParameter 引数のネストレベルが 1 でない場合、または指定されたネストレベルまでの型がコレクション、配列、マップ型ではない場合
    • nested

      @Nullable public static TypeDescriptor nested(FieldSE field, int nestingLevel)
      フィールド内で宣言されたネストされた型の型記述子を作成します。

      例: フィールドが List<String> であり、ネストレベルが 1 の場合、ネストされた型記述子は String.class になります。

      フィールドが List<List<String>> であり、ネストレベルが 2 の場合、ネストされた型記述子も String.class になります。

      フィールドが Map<Integer, String> で、ネストレベルが 1 の場合、ネストされた型記述子は、マップ値から派生した文字列になります。

      フィールドが List<Map<Integer, String>> で、ネストレベルが 2 の場合、ネストされた型記述子は、マップ値から派生した文字列になります。

      ネストされた型が宣言されていないため取得できない場合は、null を返します。例: フィールドが List<?> の場合、返されるネストされた型記述子は null になります。

      パラメーター:
      field - フィールド
      nestingLevel - フィールド内のコレクション / 配列要素またはマップキー / 値宣言のネストレベル
      戻り値:
      指定されたネストレベルのネストされた型記述子、または取得できなかった場合は null 
      例外:
      IllegalArgumentExceptionSE - 指定されたネストレベルまでの型がコレクション、配列、マップ型でない場合
    • nested

      @Nullable public static TypeDescriptor nested(Property property, int nestingLevel)
      プロパティ内で宣言されたネストされた型の型記述子を作成します。

      例: プロパティが List<String> であり、ネストレベルが 1 の場合、ネストされた型記述子は String.class になります。

      プロパティが List<List<String>> であり、ネストレベルが 2 の場合、ネストされた型記述子も String.class になります。

      プロパティが Map<Integer, String> で、ネストレベルが 1 の場合、ネストされた型記述子は、マップ値から派生した文字列になります。

      プロパティが List<Map<Integer, String>> であり、ネストレベルが 2 の場合、ネストされた型記述子は、マップ値から派生した文字列になります。

      ネストされた型が宣言されていないため取得できない場合は、null を返します。例: プロパティが List<?> の場合、返されるネストされた型記述子は null になります。

      パラメーター:
      property - プロパティ
      nestingLevel - プロパティ内のコレクション / 配列要素またはマップキー / 値宣言のネストレベル
      戻り値:
      指定されたネストレベルのネストされた型記述子、または取得できなかった場合は null 
      例外:
      IllegalArgumentExceptionSE - 指定されたネストレベルまでの型がコレクション、配列、マップ型でない場合