Sebuah contoh terlampir yang berisi <referensi saya> diperlukan

93

Instance penutup yang berisi diperlukan

Di bawah ini adalah kodenya. positionObjadalah objek yang saya coba gunakan dan memberikan saya kesalahan di atas.

Tidak jelas kenapa.

package toolBox;
import toolBox.Secretary.positionObj;    

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

Jawaban:

131

Anda mencoba menggunakan kelas dalam non-statis positionObjtanpa instance Secretaryuntuk itu.
Kelas dalam non-statis harus milik turunan dari kelas induknya

Anda mungkin harus mengubah positionObjke kelas normal atau kelas dalam statis.

Alternatifnya, Anda dapat menulis someSecretary.new positionObj()untuk membuat instance kelas dalam milik someSecretaryinstance tersebut.

SLaks
sumber
setuju, tetapi pernyataan umum ini agak tidak jelas. dapatkah Anda memberikan contoh atau mengarahkan saya ke suatu tempat yang mungkin dapat menjelaskan hal ini dengan lebih baik? terima kasih
jason m
Iya. saya menyadari ketika mencoba men-debug bahwa jika saya membuat positionObj saya menjadi statis bahwa itu berfungsi (di kelas Sekretarisnya). Saya senang dan semua itu sekarang berfungsi, tetapi terima kasih untuk penunjuknya. Akan melihat penyebab sebenarnya dari kesalahan ini.
jason m
2
Penyebab sebenarnya dari kesalahan tersebut adalah Anda tidak memberikan contoh induk. Jangan gunakan kelas dalam non-statis kecuali jika Anda benar-benar membutuhkannya dan Anda memahami cara kerjanya . c2.com/ppr/wiki/JavaIdioms/NoPublicInnerClasses.html
SLaks
kedua solusi bekerja dengan sempurna [1- membuat kelas positionObj statis dan 2- menggunakan OuterClass.new classObj ()]. terima kasih
jason m
Iya. Namun, Anda perlu memahami basis kode Anda dengan cukup baik untuk mencari tahu mana yang benar.
SLaks
17

Pertama buat objek kelas Luar. Dalam hal ini saya pikir "Sekretaris". Kemudian buat positionObj. Seperti ini,

Secretary x = new Secretary();
Secretary.positionObj y = x.new positionObj();
Teshan
sumber
TERIMA KASIH! ... Saya telah menggunakan Java sejak v 1.0 dan saya tidak tahu Anda bisa melakukan itu!
Richard T
0

Tanda tangan generik yang benar adalah

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

Anda tidak perlu memenuhi syarat positionObj karena Anda sudah mengimpornya.

Namun, saya cukup yakin metode utama harus sesuai dengan tanda tangan di bawah ini. Jika Anda ingin menjadikan main sebagai metode utama untuk program Anda, ubah tanda tangan menjadi

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

Anda dapat membuat metode statis terpisah yang mengembalikan Peta dan memanggilnya dari main.

Sebagai catatan, semua kelas harus dimulai dengan huruf kapital, positionObj, harus PositionObj.

hvgotcodes
sumber
hei, tinggalkan beberapa kode. setuju tentang kasus tersebut. kelas tidak mengembalikan sesuatu, tetapi kesalahannya ada di sini dan saya tidak jelas mengapa.
jason m
@ Jason, saya tidak berpikir Anda dapat mengembalikan apa pun dari utama.
hvgotcodes