(これはとですJava 7
)
すべてのサブクラスにほぼ同一のコードを含めるのではなく、基本クラスにJSON文字列生成メソッドを配置しようとしていました。私が試した最初の素朴なことは次のとおりです。
public abstract class Base
{
[rest of class...]
final public <T extends Base> String toJsonString() throws IOException {
JacksonRepresentation<T> rep =
new JacksonRepresentation<>(MediaType.APPLICATION_JSON, this);
return rep.getText();
}
}
しかし、それはコンパイルされず、エラーが発生します:
error: incompatible types
required: JacksonRepresentation<T>
found: JacksonRepresentation<Base>
where T is a type-variable:
T extends Base declared in method <T>toJsonString()
だから私はこれを試しました:
public abstract class Base
{
[rest of class...]
final public String toJsonString() throws IOException {
return jsonStringHelper(this);
}
private static <T extends Base> String jsonStringHelper(T object)
throws IOException {
JacksonRepresentation<T> rep =
new JacksonRepresentation<>(MediaType.APPLICATION_JSON, object);
return rep.getText();
}
}
そしてそれはうまくいきました。何故ですか?this
コンパイラは、の型が満たされT extends Base
、必要な解決を行う型であることを認識できない/できないのはなぜですか?