7

コードでは、ユーティリティ関数と、Logger、EventWriter、いくつかの一般的な DB 呼び出しなどの機能を頻繁に使用します。コードのすべてでこれらのクラスから関数をインスタンス化すると、パフォーマンスが大幅に低下するため、これらの関数は静的であることが望ましいです (それは ?!!!? でしょうか?パフォーマンス ヒットになる可能性があります。私は、大規模な顧客データベースとサーバー上のアクセス ログの多いプロジェクトに取り組んでいます)。そして、私はstatic import in javaどれがクールに見えるか知りたいのですが、それを使用する前に深刻な考慮事項はありますか?

StackOverFlow から既に収集したもの:

静的インポートを使用すると、関数定義を判断するなど、コードが読めなくなる可能性があります。

それ以外に、私が心配しなければならないかなりの問題はありますか..?

古いコード:

class myservlet extends httpServlet
{
    pubilc doPost()
    {
        Utils utils = new Utils();
        DBFuncs dbFuncs = new dbFuncs();
        Logger logger = new Logger();
        EventWrtr eventWrtr = new EventWriter();

        utils.GetEscapedName(name);
        logger.Log("error");
        eventWrtr.WriteEvent("something happened");
        // Getting new Objects for every servlet calls

    }
}

私の現在のコード:(これが不要なインスタンス化を回避することを願っています。コードは上記のようでした。今はこのように変更しています)

/* Declaring all the methods in the below classes as static methods */  
import com.mycom.Utils;
import com.mycom.DBFuncs;
import com.mycom.Logger;
import com.mycom.EventWrtr;
class myservlet extends httpServlet
{
    public doPost()
    {
        Utils.GetEscapedName(name);
        Logger.Log("error");
        EventWrtr.WriteEvent("something happened");         
    }
}

私はちょっとこれが好きで、特に以下のアプローチを使用する際のパフォーマンスに関連する深刻な問題を知りたいです

/* Declaring all the methods in the below classes as static methods */  
import static com.mycom.Utils;
import static com.mycom.DBFuncs;
import static com.mycom.Logger;
import static com.mycom.EventWrtr;
class myservlet extends httpServlet
{
    public doPost()
    {
        GetEscapedName(name);
        Log("error");
        WriteEvent("something happened");           
    }
}
4

3 に答える 3

16

このstatic import機能はシンタックス シュガーのような機能であるため、パフォーマンスに影響することはありません。ただし、読みやすさとテストのしやすさに悪影響を及ぼします。

  • 潜在的に大きなクラスのコンテンツを現在の名前空間にダンプすると、コードが読みにくくなります。最新の IDE では、プログラム内でその名前をクリックしてオブジェクトの定義に移動できるようにすることで、これを軽減しています。
  • コードがオブジェクトに依存してstaticいるため、テストが非常に困難です。たとえば、モック ロガーを簡単にドロップして、コードがそれを使用し始めることを期待することはできません。ただし、これは静的オブジェクトを使用する場合の一般的な制限です。静的インポートの有無にかかわらず、静的オブジェクトを使用するときに発生します。
于 2012-12-14T15:12:53.780 に答える
7

あなたの質問に対する答えは次のとおりです。

いいえ。

于 2012-12-14T15:13:30.257 に答える
2

いいえ、パフォーマンスの問題は発生しません。 ただし、通常のインポートを使用することをお勧めします。この機能は使用しないでください。Java プログラム内のどの静的メソッドまたは静的属性がどのクラスに属しているかがしばらくの間わからなくなる可能性があるためです。プログラムが読めなくなる可能性があります。

于 2014-01-08T12:43:25.233 に答える