2012-09-20 20 views
11

adında hangi efektin etkisi oldu? Kısa bir süre önce Google Gson kütüphanesinin kaynak kodunu gördüm ve gerçekten tuhaf bir şey gördüm (IMO). Com.google.gson.internal paketinde "$" ile başlayan 2 sınıf vardır. ÖrneğinJava sınıfında

public final class $Gson$Types { ... } 

için

"bir iç sınıftır neden kullanmayın lütfen" gibi bir şey dolar işareti gelişimine etkisi vardır ya da sadece dış geliştiriciler demesidir; mu?

cevap

8

Herhangi bir para birimi veya devam karakterini bir tanımlayıcıda kullanabilirsiniz.

$ 'ı kullanarak $ olarak oluşturulduğunu önerir. Yapı tarafından üretilen veya yalnızca dahili kullanım için. Eğer örneğin oluşturulan sınıflar ile çatışmaları varsa

Uses for special characters in Java code

Hidden code

Sadece bir soruna neden

class A { 
    class B { 
    } 
} 
class A$B { 
} 

Derleyici sınıfları yapılan bu kadar neden olabilen bir $ ile başlamayın oluşturulan

error: duplicate class: A.B 

bildirir. A Sınıfı görünebilir

Windows 7'de

, özel karakterler

public static void main(String... args) throws IOException { 
    for (char ch = 0; ch < Character.MAX_VALUE; ch++) { 
     if (Character.isJavaIdentifierStart(ch) && !Character.isLetter(ch)) 
      System.out.println("interface " + ch + " { }"); 
    } 
} 

interface $ { } 
interface _ { } 
interface ¢ { } 
interface £ { } 
interface ¤ { } 
interface ¥ { } 
interface € { } 

Diğer özel karakterler Java tarafından izin verir, ancak dosya adları olarak desteklenmemektedir. Bu işletim sistemine ve muhtemelen dile bağlı olabilir.

+0

"Herhangi bir" para birimi işaretini kullanabileceğinizi sanmıyorum. JLS'den: "Java harfleri" büyük ve küçük harf ASCII Latin harflerini AZ (\ u0041- \ u005a) ve az (\ u0061- \ u007a) içerir ve tarihsel nedenlerden dolayı, ASCII alt çizgi (_, or \) u005f) ve dolar işareti ($, veya \ u0024) $ karakteri yalnızca mekanik olarak oluşturulmuş kaynak kodunda veya nadiren eski sistemlerdeki önceden var olan isimlere erişmek için kullanılmalıdır. " Örneğin, bir Euro işaretinin geçerli olduğundan şüpheliyim. –

+0

@JonSkeet Önemli kelime * içerir *. Euro (euro) işareti dahil olmak üzere çoğu para birimi işareti de geçerlidir. – assylias

+1

Euro'ya izin verilir, ancak az olanlardan biridir. Tüm Windows 7 çalıştı.;) –

1

Derleyici/çalışma zamanı perspektifinden, yalnızca G veya s gibi adın bir parçasını oluşturan bir karakter. Belli bir anlamsal anlamı yok. a olmalıdır

bir tanımlayıcı Java harf ve Java basamak sınırsız uzunlukta dizisidir İlki: Ancak

, language spec sen $ karakteri kendin tanımlayıcılarda kullanmaktan kaçınmak gerektiğini ima etmez Java mektubu.

...

"Java harflerle"

büyük ve küçük ASCII Latin harfleri şunlardır A - tarihsel nedenlerle, ve ASCII çizgi ( Z ( \u0041 - - \u005a) ve az ( \u007a \u0061) _, veya \u005f) ve dolar işareti ( $ veya \u0024). $ karakteri yalnızca mekanik olarak oluşturulmuş kaynak kodunda veya nadiren eski sistemlerdeki önceden var olan isimlere erişmek için kullanılmalıdır.

-1

Hayır, bu çok yanlış, google bunu yapmamalıydı. $ Işareti özellikle yuvalanmış sınıflarda bir sınırlayıcı olarak ayrılmıştır. JDK dahil olmak üzere birçok kod, bu sözleşmeye (neredeyse herkes tarafından gözlemlenen) bağlıdır.google'ın yaramaz adlandırma uygulaması bu kodları kırıyordu.

+0

Somut bir örnek verebilir misiniz? –

İlgili konular