これはJava map with values limited by key's type parameterの拡張です。しかし、私はを格納するためにMap
を使用しようとしています。Java - タイプセーフな異種コンテナパターンを格納する関数
private static Map<Class<?>, Function<?, JSONObject>> serializers = new HashMap<>();
private static <T> void addSerializer(Class<T> klass, Function<T, JSONObject> fn) {
serializers.put(klass, fn);
}
private static <T> Function<T, JSONObject> getSerializer(Class<T> klass) {
return (Function<T, JSONObject>) serializers.get(klass);
}
static {
// add entries with addSerializer
}
public static JSONObject serialize(Object object) {
Class<?> klass = object.getClass();
return serializers.get(klass).apply(klass.cast(object));
}
私は、リンクされたSOの質問で説明したパターンに従ったが、私はMap
に保存されているFunction
ためapply
メソッドを呼び出すようにしようとしています最後の行、上の問題に実行しています。
私は取得していますエラーメッセージが
The method apply(capture#6-of ?) in the type Function<capture#6-of ?,JSONObject> is not applicable for the arguments (capture#7-of ?)
ですが、私はこれを回避するために何かできることはありますか、私は同じ目標を達成するために使用できる別の構造がありますか?ここ
私は2つのタイプの疑いがありますか?同じものとみなされています。同じ地点でジェネリックを定義する代わりに、関数を定義する別のクラスを作成したいと思うかもしれません。 – Jason