2017-01-18 6 views
4

私のコードベースはjavaとkotlinのコードが混在しています。私は@ JvmOverloadsをデフォルトの引数でインターフェイスメソッドに使用したいと思います。そのような:Kotlinのインタフェースで@jvmoverloadsを使用する方法

@JvmOverloads 
fun getClientCompanyId(clientId: Long, date: DateTime = DateTime.now()): Long 

私は残念ながら、これを行うことができないと私はメッセージを取得:私はオーバーライドされた上でそれを使用する場合

JvmOverloadsしかし、インタフェースのメソッド

に使用することはできませんが関数を呼び出すと、私は得る

プラットフォーム宣言の衝突:次の宣言は、同じJVMを持っていますignature(getClientCompanyId(JLorg /ジョダ/時間/日時;)J):

  • @JvmOverloads公共オープン楽しいgetClientCompanyId(のclientId:ロング、日付:日時= ...):ロング
  • @JvmOverloads公共オープン楽しいgetClientCompanyId(のclientId:ロング、日付:日時= ...):ロング

、ちょうどレコードの:私はオーバーライドされたメソッドで、デフォルト値を配置しようとするとき、私はメッセージを取得している:

オーバーライド機能でパラメータのデフォルト値を指定することができません

kotlinで可能なことはありますか?すべての答えをありがとう。

+0

同じ問題が発生しましたが、これまでに優れたソリューションを見つけましたか? – BlackCat

+0

私が知る限り、存在しない – xklakoux

答えて

1

あなたができることは、自分で過負荷を定義することだと思います。例:

fun getClientCompanyId(clientId: Long, date: DateTime): Long 
fun getClientCompanyId(clientId: Long) = getClientCompanyId(clientId, DateTime.now()) 
+0

ありがとうございましたが、明らかに私はすでにそれを行い、それを改善しようとしていました。 – xklakoux

+0

私はあなたがより良い/異なる答えを望んでいたことを理解しています。これを改善するために言語に機能を追加することについて議論したい場合は、discuss.kotlinlang.orgに投稿することをお勧めします。 – mfulton26

関連する問題