public class Sonnet29 implements Poem {
private String[] poem;
public Sonnet29() {
poem = { "foo", "bar" , "baz"};
}
@Override
public void recite() {
//...
}
}
Dòng poem = { "foo", "bar" , "baz"};
đang đưa ra lỗi biên dịch.Lỗi trình biên dịch khi sử dụng hằng số mảng trong hàm tạo
Bất kỳ lý do cụ thể nào tại sao điều này không được phép? Làm thế nào để khởi tạo một mảng String với hằng số mảng?
EDIT: Cảm ơn mọi người đã trả lời câu hỏi của bạn. Bây giờ tôi rõ ràng những gì được cho phép và những gì là không. Nhưng tôi có thể yêu cầu bạn lý do tại sao điều này KHÔNG được phép?
String[] pets;
pets = {"cat", "dog"};
Sau khi googling một chút, tôi thấy link này, nơi ở, người ta nói rằng mã hóa như thế này rời khỏi biên dịch trong mơ hồ - cho dù các con vật nuôi nên mảng của Strings hoặc mảng các đối tượng. Tuy nhiên từ tuyên bố, nó có thể rất tốt con số ra rằng nó là một mảng String, phải không ???
Nếu đó là hằng số, thì 'bài thơ' không nên được khởi tạo trong hàm tạo. –
@True Soft: Tôi chỉ đang cố gắng 'khởi tạo' trạng thái đối tượng với một số hằng số. Đồng ý. Nếu bài thơ được khai báo là STATIC, chuỗi tĩnh riêng [] poem = {"foo", "bar", "baz"}; nó hoạt động tốt. – HanuAthena
@HanuAthena, cho dù thành viên có 'tĩnh' hay không, vấn đề ở đây là khởi tạo mảng chỉ được phép trong một khai báo (§8.3, §9.3, §14.4), hoặc như là một phần của việc tạo mảng biểu thức (§15.10). Do đó, không có 'static' nó cũng sẽ làm việc' private string [] poem = {"foo", "bar", "baz"}; 'nếu bạn làm điều này ngay tại chỗ – Andrew