タグ付けされた質問 「static-methods」

クラスのインスタンスを必要とせず、そのようなインスタンスのデータ(またはthis、self、Meなど)に暗黙的にアクセスできないメソッド。


21
Java:静的メソッドを使用する場合
静的メソッドをいつ使用するのですか?いくつかのゲッターとセッター、またはメソッドを1つまたは2つ持つクラスがあり、それらのメソッドをクラスのインスタンスオブジェクトでのみ呼び出し可能にしたいとします。これは、静的メソッドを使用する必要があることを意味しますか? 例えば Obj x = new Obj(); x.someMethod または Obj.someMethod (これは静的な方法ですか?) 私はかなり混乱しています!



24
Javaインターフェースで静的メソッドを定義できないのはなぜですか?
編集: Java 8以降、静的メソッドがインターフェースで許可されるようになりました。 次に例を示します。 public interface IXMLizable<T> { static T newInstanceFromXML(Element e); Element toXMLElement(); } もちろん、これは機能しません。しかし、なぜですか? 考えられる問題の1つは、電話をかけるとどうなるかです。 IXMLizable.newInstanceFromXML(e); この場合、空のメソッド(つまり、{})を呼び出すだけでよいと思います。すべてのサブクラスは静的メソッドを実装する必要があるため、静的メソッドを呼び出すときにはすべて問題ありません。では、なぜこれができないのでしょうか。 編集:私は「Javaのやり方だから」よりも深い答えを探していると思います。 静的メソッドを上書きできない特定の技術的な理由はありますか?つまり、Javaの設計者がインスタンスメソッドをオーバーライド可能にして静的メソッドにしないことにしたのはなぜですか。 編集:私のデザインの問題は、インターフェイスを使用してコーディング規約を強制しようとしていることです。 つまり、インターフェースの目的は2つあります。 IXMLizableインターフェイスを実装して、それを実装するクラスをXML要素に変換できるようにしたい(ポリモーフィズムを使用して、うまく機能する)。 IXMLizableインターフェイスを実装するクラスの新しいインスタンスを作成したい場合は、newInstanceFromXML(Element e)静的コンストラクターがあることが常にわかります。 インターフェースにコメントを入力する以外に、これを確実にする他の方法はありますか?


9
Javaの静的メソッドからgetClass()を呼び出す方法は?
静的メソッドが必要なクラスがあります。これらの静的メソッドの中で、メソッドgetClass()を呼び出して次の呼び出しを行う必要があります。 public static void startMusic() { URL songPath = getClass().getClassLoader().getResource("background.midi"); } しかしEclipseは私に言っています: Cannot make a static reference to the non-static method getClass() from the type Object このコンパイル時エラーを修正する適切な方法は何ですか?

7
名前空間+関数とクラスの静的メソッド
関連する関数のセットを持っている、または作成しようとしているとしましょう。それらが数学に関連しているとしましょう。組織的には、 これらの関数を記述してMyMath名前空間に配置し、次のように参照しますMyMath::XYZ() 呼び出されるクラスを作成し、MyMathこれらのメソッドを静的にして、同様に参照しますMyMath::XYZ() ソフトウェアを整理する手段として、なぜどちらかを選択するのですか?

21
プライベートヘルパーメソッドは、静的である可能性がある場合、静的である必要があります。
インスタンス化するように設計されたクラスがあるとします。クラス内には、クラスメンバーへのアクセスを必要とせず、引数のみを操作して結果を返すプライベート "ヘルパー"メソッドがいくつかあります。 public class Example { private Something member; public double compute() { double total = 0; total += computeOne(member); total += computeMore(member); return total; } private double computeOne(Something arg) { ... } private double computeMore(Something arg) {... } } 特定する特別な理由はありますか computeOnecomputeMore静的メソッドとして、または特別な理由はありませんか? 問題がなくても静的である可能性がありますが、非静的のままにしておくのが最も簡単です。

11
ジェネリッククラスの静的メソッド?
Javaでは、次のようなものにしたいと思います: class Clazz<T> { static void doIt(T object) { // ... } } しかし、私は得る 非静的型Tへの静的参照を作成できません 私は基本的な用途以外のジェネリックを理解していないので、それをあまり理解できません。それは私が主題についてインターネットで多くの情報を見つけることができなかったことを助けません。 同様の方法で、そのような使用が可能かどうかを誰かが明確にできますか?また、なぜ私の最初の試みは失敗したのですか?

15
単一のメソッドを持つクラス—最善のアプローチ?
たとえば、単一の機能を実行するためのクラスがあるとします。機能を実行した後、破棄することができます。これらのアプローチのいずれかを選ぶ理由はありますか? // Initialize arguments in constructor MyClass myObject = new MyClass(arg1, arg2, arg3); myObject.myMethod(); // Pass arguments to method MyClass myObject = new MyClass(); myObject.myMethod(arg1, arg2, arg3); // Pass arguments to static method MyClass.myMethod(arg1, arg2, arg3); さまざまな状況のガイドラインを取得しようとするために、詳細について意図的に漠然としていました。しかし、私はMath.random()のような単純なライブラリ関数を実際には考えていませんでした。特定の複雑なタスクを実行するクラスをもっと考えていますが、それを行うには1つの(パブリック)メソッドのみが必要です。
172 c#  java  oop  static-methods 

5
クラス本体内でクラスstaticmethodを呼び出していますか?
クラスの本体内から静的メソッドを使用しようとするとstaticmethod、次のように、組み込み関数をデコレーターとして使用して静的メソッドを定義します。 class Klass(object): @staticmethod # use as decorator def _stat_func(): return 42 _ANS = _stat_func() # call the staticmethod def method(self): ret = Klass._stat_func() + Klass._ANS return ret 次のエラーが発生します。 Traceback (most recent call last):<br> File "call_staticmethod.py", line 1, in <module> class Klass(object): File "call_staticmethod.py", line 7, in Klass _ANS = …

7
Kotlinの静的拡張メソッド
Kotlinで静的拡張メソッドをどのように定義しますか?これは可能ですか?現在、以下のような拡張メソッドがあります。 public fun Uber.doMagic(context: Context) { // ... } 上記の拡張機能はインスタンスで呼び出すことができます。 uberInstance.doMagic(context) // Instance method しかし、以下のように静的メソッドにする方法を教えてください。 Uber.doMagic(context) // Static or class method

9
静的メソッドがメソッドと見なされるのはなぜですか?
コースの一部のコードの説明を書いていますが、誤って単語methodをfunction交換して使用しています。私は戻って言葉遣いを修正することにしましたが、私の理解の穴にぶつかりました。 私が理解していることから、サブルーチンはfunctionクラスのインスタンスに作用しない場合(その効果は明示的な入力/出力に制限されます)、methodクラスのインスタンスに作用する場合(それはインスタンスへの副作用を排除します)。 このトピックに関しては良い議論があります。受け入れられた回答の定義によれmethodば、インスタンスは暗黙的に渡されることはなく、インスタンスのメンバーにアクセスできないため、static は実際には関数である必要があります。 ただし、これは気になっていますが、methods実際にはstatic は関数ではありませんか? それらの定義により、クラスの特定のインスタンスには作用しません。彼らは関係のためにクラスに「結びついている」だけです。静的サブルーチンを「メソッド」と呼ぶ見栄えの良いサイトをいくつか見たことがあります(Oracle、Fredosaurus、ProgrammingSimplified)ので、これらはすべて用語を見落としているか、何か不足しています(私の推測は後者です)。 。 正しい文言を使用していることを確認したいのですが。 誰かがこれを片付けることができますか?

2
Javaのマルチスレッド環境での静的メソッドの動作
私を悩ませ、私の心の中でいくつかの議論をする単純な愚かな質問があります。以下の質問に対する疑問をすべて捨てたいと思います。 class Clstest{ public static String testStaticMethod(String inFileStr) { // section 0 // section 1 // do something with inFileStr // section 2 // section 3 return inFileStr; } } 5つのスレッドがそれぞれClstest.testStaticMethod("arg-n")同時に呼び出しを実行していると仮定します。 スレッド1が呼び出しますClstest.testStaticMethod("arg-1")。 スレッド1がセクション1にある場合、スレッド2はを呼び出しますClstest.testStaticMethod("arg-2")。 次に、スレッド1はどうなりますか?スリープ状態になりますか? スレッド1がチャンスを得たとき、一時停止したセクション1から実行を再開しますか? 1がありますとき、どのようにそれが起こるClstest.testStaticMethodと同じことがClstest.testStaticMethod、すべての5つのスレッド間で共有されていますか? inFileStr複数のスレッドによって送信されたものを交換する可能性はありますか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.