2011-08-16 32 views
5

Tôi mới sử dụng cả Eclipse và Java.Lỗi xây dựng trong nhật thực

Tôi tự hỏi nếu sau đây là lỗi trong trình biên dịch Eclipses hoặc cài đặt của tôi.

Tôi đã xác định một lớp công khai trong một lớp công khai để xác định kiểu trả về cho một phương thức dịch vụ.

public class ServiceThing { 
    public class ReturnType {...} 
    public ReturnType serviceMethod (...) {...} 
    ... 
} 

Trong lớp học, nơi tôi gọi là phương pháp dịch vụ tôi instatiate một ReturnType để lưu trữ thư mặc định:

ReturnType returnType = new ReturnType(...); 

Khi một cố gắng để xây dựng này tôi nhận được các lỗi sau đây:

Building không gian làm việc: Lỗi xảy ra trong quá trình xây dựng. Lỗi khi chạy trình tạo Java Builder 'trên dự án' XXXX.android '. java.lang.ArrayIndexOutOfBoundsException

Lưu không thành công: Lưu Không thành công; java.lang.NullPointerException

tôi phát hiện ra rằng cú pháp cần thiết là:

ServiceThing serviceThing = ...; 
ReturnType returnType = serviceThing.new ReturnType(...); 

Nhưng trình biên dịch không nên tạo ra một NullPointerException anyway.

+0

Tôi có thể hỏi tại sao bạn cần một lớp học công cộng trong lớp học công cộng? Nếu công chúng của nó, tại sao không làm cho nó một lớp độc lập hoàn toàn. – Gapton

+1

Nó chỉ là để đưa ra một dấu hiệu mạnh mẽ về ý định của lớp. Nó hoàn toàn là được sử dụng cho một kiểu trả về của cuộc gọi dịch vụ. Nếu tôi đặt nó vào tập tin sparate tôi nghĩ rằng nó sẽ trông lộn xộn vì nó không có một cuộc sống riêng của mình – bitestar

Trả lời

4

Bằng cách làm ReturnType một public static class bạn sẽ thoát khỏi tham chiếu đến các trường hợp phụ huynh và bạn

ReturnType returnType = new ReturnType(...); 

sẽ làm việc như bạn mong đợi nó đến.

Nếu không có static trường hợp trình sửa đổi của các lớp con chứa tham chiếu ngầm đến đối tượng cha mẹ của chúng. Đó là lý do tại sao bạn cần một cá thể ServiceThing để tạo một phiên bản ReturnType trong trường hợp này.

+0

Câu trả lời hay. Giải pháp này thực sự được xác nhận trong [Hiệu quả Java, Second Edition] (http://java.sun.com/docs/books/effective/) trong mục 22: Ủng hộ các lớp thành viên tĩnh trên nonstatic. Tôi vẫn nghĩ rằng trình biên dịch nên đã viết thông báo lỗi này: Không thể tạo một thể hiện của một lớp thành viên không có tính chất mà không có một cá thể kèm theo. – bitestar

Các vấn đề liên quan