【解決方法】クラスを静的にする必要がある場合


私が 20 年以上一緒に働いている開発者がいます。彼女は優秀で頭が良く、それぞれの長所と短所を補完しています。

私たちは両方ともJavaを学んでいます。おそらく私の方が少し進んでいますが、私たちはどちらもちょっと苦手です。 それにもかかわらず、私たちはシステムをコーディングしており、クライアントにデモを行っているところです。

つまり、彼女が構築したほぼすべてのものが静的クラスを使用しているということです。 それは悪い習慣だと思いますが、よくわかりません。 それはすべての仕事をします。 彼女のものがマルチスレッド化されるかどうかはわかりません。もしそうなら、それは静的ではありませんか? 今のところそれを無視してください。

私が試したこと:

最終的には彼女のことを理解する必要がありますが、今のところはわかりません。 閉じるときにクラッシュし始めたことを除いて、公平に言えば、それはログへの変更が原因でした。 そこで、彼女のクラスの階層構造を把握しようとしました。各レベルが閉じたときに作成されたすべてのものをクリーンアップすることを確認できるようにしました。 親愛なる神よ、それはすべて終わりました。 循環参照があるかどうかはわかりませんが、あるかもしれません。

標準クラスには明確なインスタンス化ポイントと破壊ポイントがあり、タワーを構築し、それらを取り壊します。 彼女のものは、明確にするために、ほとんどのクラスには少なくとも1つのデータクラスが含まれており、特定のメソッドでデータが取り込まれて破棄され、静的にアクセスされます。 私は絶対に extends AutoCloseable を使用し、何も静的にしませんでした。 どちらが好ましいですか? どちらもOK? どちらでもない?

編集私は静的を使用しますが、入力を受け入れ、結果を返し、すべてを忘れる関数に対してのみ使用します。 おー。 開始時にxmlファイルを読み取り、それを閉じ、その後システム設定を静的に提供するクラス。

編集 2: ご回答ありがとうございます。申し訳ありませんが、クラス自体が静的であるという意味ではありません。データ オブジェクトと関連するメソッドは静的です。 単純化されたコード ブロックを次に示します。

public class Data {
	private static parm_autoytdCollection colParmAutoYTD;


	public static void initialise() throws HandledException {
		colParmAutoYTD = new parm_autoytdCollection(GlobalData.dataConnect);
		colParmAutoYTD.selectData();
	}


	public static void close() {
		clsLogger.closeQuietly(colParmAutoYTD);			
	}
	
	
	public static void updateYTD() throws HandledException{
		for (parm_autoytdRecord YTD :colParmAutoYTD.dataList)
		{
			source = Tasks.getYTD(sourceOPA, YTD.sourceCodeN.getValue());
			destination = Tasks.getYTD(destOpA, YTD.destinationCodeN.getValue());
			Tasks.setYTD(destOpAUpd, YTD.destinationCodeN.getValue(), source + destination);
		}
	}
	

	public static void SaveReportTotals() throws HandledException {
		colParmAutoYTD.saveChanges();
	}
}

また、リンクをありがとうございます。残念ながら、公式ドキュメントは通常かなり控えめに表現されていますが、IF YOU DO THIS, Larry Ellison will KILL A PUPPY.

解決策 1

コメント

タイトルとURLをコピーしました