ここにはいくつかのJavaクラスがあるライブラリがあります。 1つのクラスには、いくつかのprotected static
メソッドがありますが、これはOOPのno-noですが、コードを変更することはできません。前述のJavaクラスをサブクラス化するScalaクラスがあると仮定して、どのように保護された静的メンバーを呼び出すことができますか?Scalaから保護された静的Javaメソッドを呼び出す
答えて
はFrequently Asked Questions - Java Interoperabilityを参照してください:
これは、スカラ座の既知の制限事項です: '静的' メンバーScalaでは の概念がありません。代わりに、ScalaはYクラスの静的メンバー を、シングルトンオブジェクトYのメンバー (クラスYの のコンパニオンオブジェクト)として扱います。このクラスから継承する場合 、1は のアクセスのみに保護することができ、クラス Yのメンバーが、アクセスすることはできません保護されたメンバーオブジェクトYの Scalaはシミュレートすることができます方法はありません
静的Scalaのオブジェクト・モデルの 整合性を損なうことなく保護 基本的な方法では、これは変更されていないので、 に行くことはありません。この の制限を回避するには、 の包含クラス の実装を作成し、すべて をカプセル化したJavaコードで保護された静的内部 クラスにアクセスする必要があります。
より 情報と制限とその回避策の具体例のためticket #1806を参照してください。
「頻繁に」尋ねられる質問は、その存在を気づかせる人がほとんどいないということはめったにありません。 :-) –
母:確かに:) –
JFYI、これは2.10.0-M2に固定されています。 – OlegYch
- 1. テンプレートからクラス保護されたメソッドを呼び出す
- 2. 親からオーバーライドされた静的メソッドを呼び出す
- 3. 静的メソッドから非静的メソッドを呼び出す静的メソッドで作成されたUSINGインスタンス
- 4. Javaで静的メソッドを呼び出す
- 5. Gradleから静的なJavaメソッドを呼び出す方法
- 6. ネイティブコードから別のパッケージの静的Javaメソッドを呼び出す
- 7. 静的メソッドから静的関数ポインタを呼び出す
- 8. PHPのクラス外から保護されたメソッドを呼び出す
- 9. Javaで保護されたWebサービスを呼び出す
- 10. Java、静的メソッドは呼び出されたオブジェクトをインスタンス化できますか?
- 11. 静的メソッド呼び出し
- 12. 静的メソッド呼び出し
- 13. webjobから呼び出されるコントローラアクションを保護する
- 14. 静的メソッドで非静的GetType()を呼び出しますか?
- 15. Java 8でメソッド参照を使用して非静的クラスから非静的メソッドを呼び出す方法
- 16. クラスで静的メソッドを呼び出す?
- 17. 静的メソッドを呼び出すsymfony DI
- 18. 静的メソッドを呼び出すユニットテストコード
- 19. ヌルオブジェクトで静的メソッドを呼び出す
- 20. C#静的メソッドを呼び出す
- 21. C#で静的メソッドを呼び出す
- 22. コンストラクタで静的メソッドを呼び出す
- 23. MOQ:抽象クラスの確認、保護メソッドが呼び出され
- 24. 保護された静的メンバー変数
- 25. Scalaからパラメータ化されたJavaクラスの静的メソッドにアクセスする
- 26. ScalaでJavaで保護されたアクセスでメソッドを作成できますか?
- 27. JNIを使用して別のスレッドから静的Javaメソッドを呼び出す
- 28. Javaリフレクションライブラリで静的メソッドを呼び出す
- 29. java汎用の静的メソッドを呼び出す
- 30. Javaトーストで非静的メソッドを呼び出す
スーパークラスメソッドを呼び出すJavaサブクラスを作成するオプションはありませんか?その後、JavaクラスをScalaにアクセスさせることができます。 – Madoc
ああ、はい、私はそのルートに行くことができると思います。ありがとう。ちょっと奇妙に思えますが、それは直接できません! –
Scalaでもっと直接的に可能かもしれませんが、わかりません。だからこそ私はこれをコメントとして投稿し、答えとして投稿しなかったのです。 Scalaには静的継承がないため、明らかに「スーパー」呼び出しは機能しません。おそらく、問題のクラスを拡張するScalaオブジェクトを作成し、 "LibraryClassName.staticMethodName(...)"を呼び出すことで、 "super"の使用を避けることができますか?これがうまくいくかどうかはわかりません。 – Madoc