Soru En İyi Uygulama: Java statik olmayan son değişkenler


Java'da, statik olmayan son değişkenler ne zaman kullanılmalıdır?

Örneğin

private static int MY_VAR = 0;

Açıkçası burada sabitlerden bahsetmiyoruz.

public static final int MY_CONSTANT = 1;

Tecrübemde, onları bir singleton kullanırken sıklıkla haklı çıkardım, ama sonra birden fazla örneğe sahip olmak zorunda kaldım ve başıma büyük baş ağrısına ve yeniden faktoring yapmaya başladım.

Pratikte kullanılması gerektiği nadir görülüyor. Ne düşünüyorsun?


21
2018-04-08 18:26


Menşei




Cevaplar:


İstatistik toplama, final olmayan değişkenleri kullanabilir, ör. oluşturulan örneklerin sayısını saymak. Öte yandan, muhtemelen bu tür bir durum için kullanmak istersiniz AtomicLong neyse, nihayetinde bu noktada final olabilir. Alternatif olarak, birden fazla statü toplarsanız, bir Statistics sınıf ve bir örneğine son başvuru.

Son derece durağan olmayan statik değişkenlere sahip olmak oldukça nadirdir.


21
2018-04-08 18:28



+1, ama Atomik kullan. "Statik" olduğunu düşünürsek birden fazla ileti dizisinin erişebileceğini varsayalım. - Jason Cohen


Bir önbellek, günlüğe kaydetme, istatistik veya bir hata ayıklama anahtarı olarak kullanıldığında bariz makul kullanımlardır. Elbette tüm özel.

Eğer bir son alana tahsis edilmiş bir nesneyiniz varsa, bu ahlaki olarak değişebilen bir alanla aynıdır.

Fan gibi bazı diller, değişebilir statiğe (veya eşdeğer) tamamen izin vermez.


6
2018-04-08 19:06



code.google.com/p/noop ayrıca herhangi bir statiği yok - Eduardo


Benim deneyimlerime göre, statik olmayan final değişkenleri sadece tekil örnekleri için kullanılmalıdır. Diğer her şey ya tek bir satırda (önbellek gibi) daha temiz bir şekilde bulunabilir ya da son haline getirilebilir (bir kayıt defteri başvurusu gibi). Ancak, sert ve hızlı kurallara inanmıyorum, bu yüzden tavsiyemi bir tuz parçasıyla alacağım. Bu, tek bir durumdan başka bir son statik olmayan değişkeni bildirmeyi düşündüğünüz herhangi bir durumu dikkatlice incelemenizi ve farklı bir şekilde yeniden düzenlenip düzenlenemeyeceğini veya farklı bir şekilde uygulanıp uygulanamayacağını, yani tek bir kapsayıcıya taşınabileceğini veya değiştirilebilen bir son referansı kullanabileceğimi önereceğim. nesne.


2
2018-04-08 22:00





Statik değişkenler, uygulama düzeyi davranışını kontrol etmek için kullanılabilir; örneğin, genel günlüğe kaydetme düzeyi, bağlanacak sunucu belirtilir.

Eskiden diğer şirketlerden gelen eski başvurularda bu tür kullanım durumları ile karşılaştım.

Günümüzde bu tür amaçlar için statik değişkenler kullanmak elbette ki kötü uygulamaama 1999'da bu kadar açık değildi. İlkbahar yok, log4j yok, hayır R.C.Martin'den temiz kod yok.

Java dili şu anda oldukça eski ve şu anda bazı özellikler kesinlikle tavsiye edilmiyor olsa bile, başlangıçta sıklıkla kullanılıyordu. Ve geriye dönük uyumluluk nedeniyle değişmesi mümkün değildir.


1
2018-03-07 10:06





Statiklerinizi sarar ve tektonlar yoluyla (veya en azından statik yöntemlerle) erişim sağladığımı düşünüyorum; çünkü erişimi daha iyi kontrol edebileceğiniz ve bazı yarış koşullarından ve senkronizasyon sorunlarından kaçınabileceğiniz için genellikle iyi bir fikirdir.


0
2018-04-08 22:03





Statik bir değişken, sınıfın bir bütün olarak kullanılabilmesi anlamına gelir, böylece her iki örnek de bir bütün olarak sınıfa sunulur. Sonu, değerin değiştirilemeyeceği anlamına gelir. Öyleyse soru şu ki, bütün bir sınıf için kullanılabilir bir değere ne zaman sahip olmak istiyorsunuz ve örneklendikten sonra değiştirilemez. Benim tahminim, bu sınıfın tüm örneklemeleri için geçerli bir sabit olurdu. Aksi takdirde nüfus sayacı gibi bir şey gerekiyorsa o zaman son olmayan değişken.


0
2018-04-09 12:47





Şahsen son sınıf olmayan değişkenler için CamelCase gösterimini kullanıyorum. Koddan açıkça bir sınıf değişkeni olduğu için başvurmanız gerekir: FooBar.bDoNotRunTests.

Bu notta, sınıf örneği değişkenlerini this Bunları yerel kapsam değişkenlerinden ayırt etmek. ex. this.bDoNotRunTests.


0
2017-10-23 17:30