2011-06-24 20 views
5

Yalnızca belirli bir sürümde kullanılabilen birçok kodun bulunduğu bir projem var ve bir hatayı düzelttiğimde bunları tüm kopyalarda düzeltmem gerekiyor. Bu çok sakıncalı.Java/Android'de #IF ve #CONST .NET eşdeğeri var mı?

Java'da #IF ve #CONST var mı, #IF yan tümcesi yanlışsa, kod derlenmez mi?

cevap

6

Java için hiçbir "resmi" ön işlemci var ve yaygın kullanılan üçüncü taraf bir tane var. Eğer IDE ve birçok başka araç doğru işleyecek olmaz özürlü yaşamaya istekli iseniz

Ama hiçbir şey, senin kod üzerinde istediğiniz herhangi öncesi işlemci kullanmanızı durdurur.

genellikle ya Java buna ihtiyacı söyleniyor, sen yoktur. Ortak bir arabirimin (veya ortak bir taban sınıfını genişleten sınıfların) birden çok uygulamasını sağlamayı ve çalışma zamanında aralarında seçim yapmayı tercih edersiniz.

derleme zaman sabiti boole bayraklar kullanılarak koşullu derleme ancak sınırlı bir şekilde, var:

Bu kod, pahalı bir yöntem çağrısı olmayan neden olur

sonuçtaki bayt derlenmiş olan

static final DEBUG = false; 

public void frobnicate() { 
    if (DEBUG) { 
    doExpensiveFrobnicationDebugOperation(); 
    } 
    doActualFrobnication(); 
} 
.class dosya.

+0

. Çok daha yararlı benim daha zaten. 1 –

+1

sayesinde ben. Ancak, ön işlemci sağlayan biliyordun 2 fayda: Derlenmiş dosya boyutu daha küçük: İkincisi: "ücretsiz" versiyonun "tam" versiyona kırılması şansını azaltın (ikincisi, sadece PC ile Android'de bir sorun olmayabilir) Her neyse, cevabınız için teşekkürler: – AndBie

+2

@AndBie: Her ikisi için bir obfuscator yardımcı olabilir. Kodun çatlamasını zorlaştırdığı için değil (aslında buna inanmıyorum), fakat ölü kodu kaldırabildiği için (hiç çağrılmayan yöntemler bile!). Bu genellikle, obtüratörlerin, serbest/libre yazılımı olsa bile, J2ME kodunda kullanılmasının nedenidir. –

0

Java için bir önişlemci diye bir şey yoktur, bu yüzden ne yazık ki koşullu derleme yapamaz.

+0

Gerçekten mi? Bu kötü :(Hala başka cevaplar bekliyor, orada umut veya başka çözüm var. Güzel cevap – AndBie