2017-10-29 8 views
2

何百ものメソッドを持つインターフェイス(ResultSet)を実装する必要があります。 ここでは、これらのメソッドのサブセットのみを実装し、他のメソッドにはNotImplementedErrorを投げます。 JavaではKotlin - クラスのすべてのメソッドに対してNotImplementedErrorをスローするスマートな方法はありますか?

私は2つの解決策が見つかりました:

  1. NotImplementedErrorをスローするすべてのメソッドを宣言し、ResultSetを実装する抽象クラスAbstractResultSetを作成します。ハックはありませんが、定型コードがたくさんあります。
  2. にすべてのメソッドを一緒に実装するためにProxy.newProxyInstanceを使用してください。コードが少なくて済みますが、他のコーダーにはあまり即座に使用できません。

Kotlinには3番目のオプションがありますか?

私の場合、SQLServerBulkCopyを介してSQLServerにインポートするには、IBMデータセット(パック小数点、バイナリフィールド、ゾーン番号、可変長の行など)を使用してResultSetを実装する必要があります。私はこのクラスによってどのResultSetメソッドが呼び出されているのかわかりません。今のところ、実装されていないメソッドへの呼び出しを記録する「最も使用される」メソッドのみを実装します。

答えて

0

ResultSetから継承したインターフェイスMyResultSetを作成し、すべてのメソッドを実装してNotImplementedErrorをスローすることができます。これはJavaの最初のソリューションと似ていますが、今はクラスではなく、より柔軟なインタフェースです。希望を助けてください。

interface MyResultSet : ResultSet { 
    fun bar() ... 
    fun foo() { 
     throw NotImplementedError() 
    } 
} 
0

チェックアウトTODOをマークしてもNotImplementedError

/** 
* Always throws [NotImplementedError] stating that operation is not implemented. 
* 
* @param reason a string explaining why the implementation is missing. 
*/ 
@kotlin.internal.InlineOnly 
public inline fun TODO(reason: String): Nothing = throw NotImplementedError("An operation is not implemented: $reason") 

使い方スロー標準のTODO機能:あなたはまた、IDEを使用してnotImplemented feturesを見つけることができるこの方法で

fun foo() { 
     TODO("It will be soon") 
    } 

を」 Todo "タブをクリックします。それはプラスです。

+0

この回答は、@Andrewソリューションの改善ですが、基本的に同じアイデアを共有しています。私は各メソッドのTODOでデフォルトの実装を提供するインターフェイスを拡張します。単純ですが、IDEは仕事をしますが、私は定型コードをたくさん作成します。 – Fraquack

関連する問題