<Referansım> içeren çevreleyen bir örnek gerekli


93

Aşağıdakileri içeren kapalı bir örnek gereklidir

Kod aşağıdadır. positionObjkullanmaya çalıştığım nesne ve bana yukarıdaki hatayı veriyor.

Nedeni belli değil.

package toolBox;
import toolBox.Secretary.positionObj;    

public class PositionManagement {
    public static HashMap<String, Secretary.positionObj> main(String vArg){
        positionObj newPosition=new positionObj();
    }
}

Yanıtlar:


131

Statik olmayan iç positionObjsınıfı Secretary, ait olduğu bir örnek olmadan kullanmaya çalışıyorsunuz .
Statik olmayan bir iç sınıf, üst sınıfının bir örneğine ait olmalıdır

Muhtemelen positionObjnormal bir sınıfa veya statik bir iç sınıfa geçmelisiniz .

Alternatif olarak, someSecretary.new positionObj()örneğe ait olan iç sınıfın bir örneğini oluşturmak için yazabilirsiniz someSecretary.


kabul etti, ancak bu genel ifade biraz belirsiz. bunu daha iyi açıklayabilecek bir örnek verebilir misiniz veya beni bir yere yönlendirebilir misiniz? teşekkürler
jason m

Evet. hata ayıklamaya çalışırken, positionObj'mi statik hale getirirsem, çalıştığını fark ettim (Secretary sınıfında). Mutluyum ve şimdi işe yarayan her şey, ama işaretçi için teşekkürler. Bu hatanın gerçek nedenini araştıracak.
jason m

2
Hatanın asıl nedeni, bir üst örnek vermemiş olmanızdır. Gerçekten ihtiyacınız olmadıkça ve nasıl çalıştıklarını anlamadığınız sürece statik olmayan iç sınıfları kullanmayın . c2.com/ppr/wiki/JavaIdioms/NoPublicInnerClasses.html
SLaks

her iki çözüm de mükemmel çalışır [1- positionObj sınıfını statik yapmak ve 2- OuterClass.new classObj () kullanarak]. teşekkürler
jason m

Evet. Ancak, kod tabanınızı hangisinin doğru olduğunu anlamak için yeterince iyi anlamanız gerekir.
SLaks

17

Önce Outer sınıfının bir nesnesini oluşturun. Bu durumda "Sekreter" diye düşünüyorum. Ardından positionObj'yi oluşturun. Bunun gibi,

Secretary x = new Secretary();
Secretary.positionObj y = x.new positionObj();

TEŞEKKÜR EDERİM! ... v 1.0'dan beri Java kullanıyorum ve bunu yapabileceğinizi bilmiyordum!
Richard T

0

Doğru genel imza şöyle olacaktır:

public static HashMap<String, positionObj> main(String vArg)

Zaten içe aktardığınız için positionObj'yi nitelendirmeniz gerekmez.

Ancak, bir ana yöntemin aşağıdaki imzaya uyması gerektiğinden oldukça eminim. Ana yöntemin programınız için ana yöntem olmasını istiyorsanız, imzayı şu şekilde değiştirin:

 public static void main(String[] args) {...}

bir Map döndüren ve onu main'den çağıran ayrı bir statik metot oluşturabilirsiniz.

Not olarak, tüm sınıflar büyük harfle başlamalı, positionObj, PositionObj olmalıdır.


hey, bazı kodu atlamış. dava hakkında anlaştı. sınıf bir şey döndürüyor, ancak hata burada ve nedenini bilmiyorum.
jason m

@jason, main'den bir şey iade edebileceğinizi sanmıyorum.
hvgotcodes
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.