Java クラスを拡張する Scala クラスを作成しています。この抽象 Java クラスにはいくつかのコンバーターが含まれているため、拡張する必要があります。また、フレームワークにプラグインできる独自のコンバーターを作成する必要があります。したがって、以下のメソッドの署名は私に強制されます。クラスが抽象クラスを拡張すると言うと、Eclipse によって自動的に生成されます。メソッドのシグネチャを変更しようとすると、「親からの抽象メソッドを実装していない」ため、クラスはコンパイルに失敗します。
もちろん、メソッドの実装は私の選択ですが、型システムの制約を満たすことができないことがわかりました。
私は非常に単純なことをする必要があります: "None" を null として扱い、それ以外はそのまま返します。しかし、タイプセーフな方法ではこれを行うことができないことがわかりました。以下のようなコードを書くと、「抽象型 T は消去により消去されるため未チェックです」という警告が出ます。どうすればそれをなくすことができますか?
また、消去が適用された場合、コードがどのように見えるか、つまり、2 番目の "if" 条件がどのようになるかについても考えています。
直感的に、入力が Any の場合に T を返すことを保証できないことを理解しています。これが、コンパイラが不満である理由です。実際には、文字列を読み取って文字列を返すだけなので、これは機能しますが、メソッドのシグネチャは継承宣言によって強制されます。
def execute[T](value: Any): T = {
if (value == null || value == "None") null.asInstanceOf[T]
// Warning: abstract type T is unchecked since it is eliminated by erasure
else if (value.isInstanceOf[T]) value.asInstanceOf[T]
// warning here: ^
else null.asInstanceOf[T]
}
このメソッドを実装するにはどうすればよいですか?