2011-09-25 36 views
8

Có cách nào để tạo một mảng các đối tượng như một phần của một hàm tạo hoặc phương thức không? Tôi thực sự không chắc chắn làm thế nào để từ này, vì vậy tôi đã bao gồm một ví dụ. Tôi có một enum, và một trong những lĩnh vực là một mảng của các con số. Dưới đây là những gì tôi đã thử:Tạo một mảng trong khi truyền nó như một đối số trong Java

public enum KeyboardStuff { 

    QWERTY(1, {0.5f, 1.3f, 23.1f}, 6); 
    DVORAK(5, {0.1f, 0.2f, 4.3f, 1.1f}, 91); 
    CHEROKEE(2, {22.0f}, 11); 

    private int number, thingy; 
    private float[] theArray; 

    private KeyboardStuff(int i, float[] anArray, int j) { 
     // do things 
    } 

} 

Trình biên dịch nói rằng dấu ngoặc {} không hợp lệ và cần được loại bỏ. Có cách nào tôi có thể vượt qua một mảng như một đối số mà không tạo ra một mảng các đối tượng trước?

Trả lời

26

Bạn có thể thử với new float[] { ... }.

public enum KeyboardStuff { 

    QWERTY(1, new float[] {0.5f, 1.3f, 23.1f}, 6); 
    DVORAK(5, new float[] {0.1f, 0.2f, 4.3f, 1.1f}, 91); 
    CHEROKEE(2, new float[] {22.0f}, 11); 

    private int number, thingy; 
    private float[] theArray; 

    private KeyboardStuff(int i, float[] anArray, int j) { 
     // do things 
    } 

} 
+0

Tôi không biết điều này là có thể, cảm ơn bạn rất nhiều! – Tanaki

2

Có cách nào bạn có thể chuyển mảng không tạo mảng không?

Không, nhưng bạn có thể sử dụng varargs để làm cho chủ yếu là vô hình, mặc dù rằng int ở cuối có thể cần phải di chuyển.

4

Sau @ Dave đề nghị tôi sẽ sử dụng một vararg

QWERTY(1, 6, 0.5, 1.3, 23.1); 
DVORAK(5, 91, 0.1, 0.2, 4.3, 1.1); 
CHEROKEE(2, 11, 22.0); 

private final int number, thingy; 
private final double[] theArray; 

private KeyboardStuff(int number, int thingy, double... theArray) { 
    // do things 
} 

Nó là khá hiếm hoi mà sử dụng một float là tốt hơn so với sử dụng một double. double có lỗi làm tròn ít hơn và chỉ sử dụng thêm 4 byte.

+0

@Dave quá, tôi gần như quên mất điều này. Cảm ơn bạn cho giải pháp này, nhưng tôi có thể cần phải tạo nhiều hơn một tham số Object [], vì vậy điều này sẽ không lý tưởng trong tình huống đó. – Tanaki

0

Nếu sử dụng của Lists thay vì mảng là một lựa chọn, các phiên bản tương lai của Java có thể bắt đầu hỗ trợ một cú pháp 'collection literals' mà tiếc là dường như không đã làm cho nó thành Java 8:

public enum KeyboardStuff { 

    QWERTY(1, [0.5f, 1.3f, 23.1f], 6); 
    DVORAK(5, [0.1f, 0.2f, 4.3f, 1.1f], 91); 
    CHEROKEE(2, [22.0f], 11); 

    private int number, thingy; 
    private List<Float> values; 

    private KeyboardStuff(int i, List<Float> values, int j) { 
     // do things 
    } 

} 
+0

Có vẻ như các bộ sưu tập chữ đã không biến nó thành Java 8, thật không may. – harperska

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