2011-06-27 5 views
0

私は主にc/C++/objective-Cプログラマであり、現在はアンドロイドアプリケーションでJavaで作業しています。私の質問は簡単です:私は、私のプロジェクトのどこからでも呼び出すことができるクラスには関連していないユーティリティ関数が必要です(#何らかの並べ替えが必要なの?)。Javaの非クラス関数

クラスの静的な静的関数を作成し、それをClass.someFunction();として呼び出すことができます。 someFunction();私はこれがjavaで可能かどうか、それが何のための構文なのかよく分かりません。

+0

これはどのようなユーティリティクラスですか?必要に応じてそれをインポートすることは、それほど難しいことではありません。あなたは絶対にあらゆるクラスでそれを必要としますか? –

+0

それは私が必要とする巨大なユーティリティでもありません。なぜなら、それはクラス –

答えて

14

あなたは、あなたがそれを使用する各ファイルに次のインポートを追加することにより、静的インポートを使用して同じ「効果」を達成することができます。Javaのすべての方法は、しかし

import static x.y.Class.someFunction; // or x.y.Class.*; 

... 

// some code somewhere in the same file 
someFunction(); 

をしなければなりませんクラスに参加する静的なインポートでは、そうでない場合は(簡単に)ふるまうことができます。

P.S.これは静的フィールドでも機能します。

+0

+1に入れる必要がないからです。ただし、各クラスファイルは、ファイルの先頭に 'import'が追加されている必要があることを強調しておきます。 – StriplingWarrior

+0

Hrm、私がJavaを好きではないもう一つの理由ですが、これは自分のコードで探していた目標を達成しています。 –

+0

@StriplingWarrior:通知され更新されました – skaffman

3

あなたはstatic importを使用することができます。

import static com.example.MyUtilityClass.*; // makes all class methods available 
// or 
import static com.example.MyUtilityClass.myMethod; // makes specified method available 

使い古された場合、それは難しいツーデバッグコードを引き起こし、ので、あなたは、これは非常に頻繁に使用され表示されません(上記のリンクでの最後の段落を参照してください)。

ここでは、これを使用することをお勧めする約related questionです。例えば

0

Yeapインポート静的..

を:

import static java.lang.Math.max; // Allowing to use max method anywhere in the source 
class SomeClass { 
    int m = max(1, 2);// m now is 2 due t Math.max(int, int) 
} 
1

また、プログラミングのベストプラクティス以下、あなたは、あなたを定義することができますいくつかのユーティリティクラスのようなすべての一般的な、頻繁に使用する機能を定義する必要がありますAPI内の異なる場所で使用/呼び出される関数またはフィールド(おそらくは定数、つまり静的および最終属性)

ただし、引き続きユーティリティクラスをインポートする必要があります。 API階層構造の最上位の親クラスにそのような機能を定義しないと、クラスをインポートする必要がなくなります。

これが役に立ちます。 ありがとうございました....

+0

私はすべてのそれらの機能を持っている基本クラスを作ることを考えていましたが、複雑な階層の場合には機能がどこにあるのかを難読化するかもしれません –

関連する問題