1

私はグアバを使用して、クラスの単一のフィールドのみを気にする比較対象を作成しようとしています(コレクションでソートに使用されます)。このフィールドはジェネリックで、任意の型を取ることができます。グアバの Ordering#onResultOf メソッドを使用して、ラッパー オブジェクトをジェネリック型に変換し、その型に相当するものを提供しています。

次のコードがあります。

  private static final class Reference<T> { ... }
  ...
  public static <T> Function<Reference<T>, T> referenceToData() {
    return (Function<Reference<T>, T>) ToData.INSTANCE;
  }

  private enum ToData implements Function<Reference<Object>, Object> {
    INSTANCE;

    @Override
    public Object apply(final ComparatorMerger.Reference<Object> input) {
      return input.data;
    }
  }

コードをコンパイルすると、次のエラーが発生します。

[ERROR] ... inconvertible types
[ERROR] found   : Reference.ToData
[ERROR] required: com.google.common.base.Function<Reference<T>,T>

キャスティングを希望どおりに機能させる方法がわかりません。何かアドバイス?

4

1 に答える 1