問題タブ [static-import]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 「インポート」の後の「静的」修飾子はどういう意味ですか?
このように使用すると:
import static com.showboy.Myclass
とはどう違いimport com.showboy.Myclass
ますか?
java - メソッドの静的インポートの良いユースケースは何ですか?
メソッドの静的インポートは良い考えではなかったというレビューコメントを受け取りました。静的インポートは、ほとんど静的メソッドを持つDAクラスからのメソッドでした。したがって、ビジネスロジックの途中で、現在のクラスに属しているように見えるdaアクティビティがありました。
レビューアは私がコードを変更することに熱心ではなく、私は変更しませんでしたが、私は彼にある程度同意します。静的インポートを行わなかった理由の1つは、メソッドが定義された場所が混乱していたことです。現在のクラスにもスーパークラスにもなかったため、定義を特定するのに時間がかかりすぎました(Webベースのレビューシステムにはクリック可能機能がありません)。 IDEのようなリンク:-)これはそれほど重要ではないと思います。静的インポートはまだ非常に新しく、すぐにそれらを見つけることに慣れます。
しかし、私が同意するもう1つの理由は、修飾されていないメソッド呼び出しが現在のオブジェクトに属しているようであり、コンテキストをジャンプしてはならないということです。しかし、それが本当に属していれば、そのスーパークラスを拡張することは理にかなっています。
では、静的インポートメソッドが意味をなすのはいつですか?いつやったの?修飾されていない呼び出しの外観は気に入りましたか?
編集:一般的な意見は、誰も現在のクラスのメソッドと混同しない場合は、静的インポートメソッドであるようです。たとえば、java.lang.Mathおよびjava.awt.Colorのメソッド。しかし、absとgetAlphaがあいまいでない場合、readEmployeeがなぜであるかわかりません。多くのプログラミングの選択肢と同様に、これも個人的な好みだと思います。
java - 静的インポートのオーバーロード
assertEquals
テストクラスでは、に依存しない特別なロジックを使用して、独自のオーバーロードを提供したいと思いObject.equals
ます。残念ながら、assertEquals
ローカルでメソッドを宣言するとすぐにJavaが静的インポートを検出しなくなるため、これは機能しませんorg.junit.Assert.*
。
これを回避する方法はありますか?つまり、静的にインポートされたメソッドに追加のオーバーロードを提供する方法はありますか?(かなり明白な解決策は、メソッドに別の名前を付けることですが、この解決策は同じ美的魅力を持っていません。)
私のテストクラスファイルは次のようになります。
Error *
は「assertEquals(Bar, Bar)
型のメソッドBarTest
は引数には適用できません(int, int)
。」</p>
java - プライベートサブクラスの静的インポートを実行できますか?
クラスの外に公開されないように、プライベートな列挙型があります。とにかく、そのタイプの静的インポートを実行できるので、毎回列挙型を入力する必要はありませんか?それとも、これを書くためのより良い方法はありますか?例:
java - 静的にインポートされている場合、どのようにジェネリック メソッドを型で呼び出すことができますか?
特別なタイプでジェネリック メソッドを呼び出すことができることがわかりました。
一般的なメソッドがあるとします。
次のように呼び出すことができます。
しかし、静的にインポートされた場合、どのように呼び出すことができますか? 例えば:
これは動作しません。
java - Javaでは、コンストラクタまたはローカル変数を(静的に)インポートできますか?
それとも、メソッド/フィールド/列挙定数に対してこれを行うことができますか?
java - クラスにインポートされたものと同じ名前のメソッドがある場合、importstaticは機能しません
メソッドJunit4
を静的にインポートするテストケースがあります。org.junit.Assert.assertEquals
このクラスでは、equalsを実装していない(また、実装に苦労している)いくつかの複雑な内部クラスをアサートするためのユーティリティメソッドを作成しました。
インポートしているメソッドを「オーバーロード」しているようにコードが動作することを期待していましたが、静的にインポートされたメソッドassertEquals
を非静的なプライベートメソッドが隠しているようです。また、メソッドをpublic
and static
(すべての順列)に変えようとしましたが、成功しませんでした。名前を変更する必要がありました。
それがこのように動作する理由は何ですか?ドキュメントでこの動作への参照を見つけることができませんでした。
java - Javaでの静的インポートの正しい使用
重複の可能性:
メソッドの静的インポートの良いユースケースは何ですか?
次のようなJavaでの静的インポートはめったに見られません。
import static java.lang.Math.*;
その後PI
、を呼び出さなくてもアクセスできますMath.PI
。
あなたはこれをそれほど頻繁に見ないので、それはこれをするのは悪いデザインであることを意味しますか?
java - Java でのデバッグ用の単純な印刷メソッドの作成
車輪を再発明する前に、すべてのクラスでsay("We are here.");
定義せずに、 などのコードにデバッグ トレースを挿入できるようにしたいと考えています。static void say()
実行する必要がありSystem.out.println(s)
、グローバルにオンまたはオフに切り替える必要があります(doSay(false)
)。また、呼び出し元のクラスを識別できるようにしたいと思います(here で説明されているように)。例えば:
MyClass: 私たちはここにいます。
Javaにはすでにそのようなツールがありますか?
java - このグリッド変数はどこから来たのですか?
DynamicReportsのColumnGridReportの例を見ています。
例で使用されているDSLの代わりに、従来のコード構文を使用したいと思います。
などを使用report.addColumn(...)
しますが、「columnGrid」の部分でそれを行う方法がわかりません。
変数がありますgrid
...それはどこで初期化されますか?
report.columnGrid(
基本的には、内側の部分を初期化する方法を実行したいと思います)
。
これを古典的な構文に変換するにはどうすればよいですか?