Bắt buộc phải có phiên bản bao quanh chứa <my reference>


91

Một phiên bản bao quanh có chứa là bắt buộc

Dưới đây là mã. positionObjlà đối tượng mà tôi đang cố gắng sử dụng và nó đang cho tôi lỗi ở trên.

Không rõ tại sao.

package toolBox;
import toolBox.Secretary.positionObj;    

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

Câu trả lời:


129

Bạn đang cố gắng sử dụng bên trong không tĩnh positionObjlớp mà không có một thể hiện của Secretarycho nó thuộc về.
Một lớp bên trong không tĩnh phải thuộc về một thể hiện của lớp cha của nó

Bạn có thể nên thay đổi positionObjthành một lớp bình thường hoặc một lớp bên trong tĩnh.

Ngoài ra, bạn có thể viết someSecretary.new positionObj()để tạo một thể hiện của lớp bên trong thuộc về someSecretarycá thể đó.


đã đồng ý, nhưng tuyên bố chung này là một chút không rõ ràng. bạn có thể cung cấp một ví dụ hoặc chỉ cho tôi một nơi nào đó có thể giải thích tốt hơn điều này không? cảm ơn
jason m

Đúng. tôi nhận ra khi cố gắng gỡ lỗi rằng nếu tôi đặt positionObj của mình thành tĩnh thì nó hoạt động (trong lớp Thư ký của nó). Tôi rất vui và tất cả những gì nó hiện đã hoạt động, nhưng cảm ơn vì con trỏ. Sẽ xem xét nguyên nhân thực tế của lỗi này.
thợ nề m

2
Nguyên nhân thực sự của lỗi là bạn không cung cấp phiên bản gốc. Không sử dụng các lớp bên trong không tĩnh trừ khi bạn thực sự cần một lớp và bạn hiểu cách chúng hoạt động . c2.com/ppr/wiki/JavaIdioms/NoPublicInnerClasses.html
SLaks

cả hai giải pháp đều hoạt động hoàn hảo [1- làm cho lớp positionObj tĩnh và 2- bằng cách sử dụng OuterClass.new classObj ()]. cảm ơn
jason m

Đúng. Tuy nhiên, bạn cần hiểu rõ cơ sở mã của mình để tìm ra cái nào là đúng.
SLaks

16

Đầu tiên tạo một đối tượng của lớp Outer. Trong trường hợp này tôi nghĩ là "Thư ký". Sau đó, tạo positionObj. Như thế này,

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

CẢM ƠN BẠN! ... Tôi đã sử dụng Java từ phiên bản 1.0 và tôi không biết bạn có thể làm điều đó!
Richard T

0

Chữ ký chung chính xác sẽ là

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

bạn không cần phải đủ điều kiện positionObj vì bạn đã nhập nó.

Tuy nhiên, tôi khá chắc chắn rằng một phương thức chính phải phù hợp với chữ ký bên dưới. Nếu bạn định lấy main là phương thức chính cho chương trình của mình, hãy thay đổi chữ ký thành

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

bạn có thể tạo một phương thức tĩnh riêng biệt trả về một Bản đồ và gọi nó từ main.

Xin lưu ý, tất cả các lớp phải bắt đầu bằng chữ in hoa, positionObj, phải là PositionObj.


này, bỏ sót một số mã. đã đồng ý về vụ việc. lớp không trả về một cái gì đó, nhưng lỗi ở đây và tôi không rõ tại sao.
jason m

@jason, tôi không nghĩ bạn có thể trả lại bất cứ thứ gì từ main.
hvgotcodes
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.