Ad gizlemeyle ilgili çözmesi son derece zor bir sorunum var. Sorunu açıklayan basitleştirilmiş bir versiyon:
Bir sınıf var: org.A
package org;
public class A{
public class X{...}
...
protected int net;
}
Sonra bir sınıf var net.foo.X
package net.foo;
public class X{
public static void doSomething();
}
Ve şimdi, buradan miras alan Ave aramak isteyen sorunlu sınıf.net.foo.X.doSomething()
package com.bar;
class B extends A {
public void doSomething(){
net.foo.X.doSomething(); // doesn't work; package net is hidden by inherited field
X.doSomething(); // doesn't work; type net.foo.X is hidden by inherited X
}
}
Gördüğünüz gibi bu mümkün değil. XKalıtsal bir tür tarafından gizlendiği için basit adı kullanamıyorum . Tam adı kullanamıyorum net.foo.Xçünkü netdevralınan bir alan tarafından gizlenmiş durumda.
BKod tabanımda yalnızca sınıf var; sınıflar net.foo.Xve org.Akütüphane sınıfları, bu yüzden onları değiştiremem!
Tek çözümüm şuna benziyor: Sırayla arayan başka bir sınıfı arayabilirim X.doSomething(); ancak bu sınıf, çok dağınık görünen isim çatışması nedeniyle var olabilirdi! Ben doğrudan çağrı hangi çözüm var mı X.doSomething()gelen B.doSomething()?
Global isim alanının belirlenmesine izin veren bir dilde, örneğin global::C # veya ::C ++ 'da, basitçe netbu genel önekle önek alabilirim, ancak Java buna izin vermiyor.
public void help(net.foo.X x) { x.doSomething(); }ve ile arayınhelp(null);