2011-12-25 43 views
11

Đây là một câu hỏi đơn giản (tôi nghĩ)Tạo một tên biến sử dụng một giá trị String

phép nói rằng tôi có mã này (Giả sử tôi có một lớp con chó)

String name = "dog"; 
dog name = new dog(); 

Làm thế nào tôi có thể nhận được java để nhận ra tên là một String và đặt tên cho đối tượng là con chó?

+3

Tại sao bạn muốn thực hiện việc này? Chắc chắn có một cách tốt hơn để đạt được những gì bạn đang cố gắng làm. –

+1

Bạn có thể nên tìm hiểu về API phản chiếu của Java nếu đó là những gì bạn muốn. – fge

+0

Tôi nghĩ tiêu đề và nội dung của câu hỏi này không phù hợp. Có vẻ như bạn không * cố gắng tạo một biến có tên dựa trên giá trị của một chuỗi. Thay vào đó, có vẻ như bạn muốn đặt lớp của biến dựa trên giá trị chuỗi. Nếu trường hợp sau là trường hợp, mẫu 'Factory' có thể hữu ích. – Kavka

Trả lời

37

Trong khi bạn có thể làm những gì bạn đang thử bằng một số ngôn ngữ kịch bản như PHP (và câu hỏi này thường được nhiều lập trình viên PHP khởi động Java yêu cầu), đây không phải là cách Java hoạt động. ít quan trọng hơn bạn có thể nhận ra và hầu như không tồn tại sau khi mã được biên dịch. Điều quan trọng hơn nhiều và khóa là biến số tham chiếu - khả năng truy cập vào một đối tượng cụ thể tại một điểm cụ thể trong chương trình của bạn, và bạn có thể tham chiếu các đối tượng một cách dễ dàng bằng cách sử dụng Bản đồ dưới dạng một chiều.

Ví dụ

Map<String, Dog> dogMap = new HashMap<String, Dog>(); 
dogMap.put("Fido", new Dog("Fido")); 

Dog myPet = dogMap.get("Fido"); 

Hoặc bạn có thể đạt được tham chiếu đến đối tượng bằng nhiều cách khác như qua mảng, ArrayLists, LinkedLists, hoặc một vài collectinos khác.

Sửa
Bạn trạng:

Cái này là trong mã của tôi tôi sẽ được sử dụng một phương pháp để tạo các đối tượng, tên của đối tượng là tùy ý nhưng tôi cần nó để được năng động vì nó sẽ không được tạm thời, vì vậy tên thực sự của đối tượng phải thay đổi hoặc tôi sẽ viết trên đối tượng đã khai báo trước đó.

Đây chính là điều tôi muốn nói khi tôi nói tên của biến không quan trọng như bạn nghĩ. Tên biến là không "tên đối tượng" (điều này thực sự không tồn tại trên thực tế).

Ví dụ, nếu bạn tạo một con chó trong một biến có tên Fido, và sau đó gán nó vào một biến có tên chỗ mới, cả hai biến, mặc dù có tên gọi khác nhau sẽ tham khảo rất giống đối tượng:

Dog fido = new Dog; 
Dog spot = fido; // now fido and spot refer to the same object 

Nếu bạn muốn đặt biến "tên", hãy xem xét cung cấp cho lớp một thuộc tính tên:

class Dog { 
    private String name; 

    public Dog(String name) { 
     this.name = name; 
    } 

    public String getName() { 
     return name; 
    } 
} 

Bây giờ bạn có thể cung cấp cho mỗi Dog tên riêng (bán) duy nhất nếu bạn muốn.

+0

Vấn đề là trong mã của tôi, tôi sẽ sử dụng một phương pháp để tạo đối tượng, tên của đối tượng là tùy ý nhưng tôi cần nó là động vì nó sẽ không tạm thời, vì vậy tên thực của đối tượng phải thay đổi hoặc tôi sẽ viết trên đối tượng được khai báo trước đó. –

+0

@charleshorvath: vui lòng xem chỉnh sửa –

+0

Vâng, phương pháp được mô tả trong câu trả lời này cho phép bạn làm điều đó! –

5

Tôi không cho rằng bạn đang nghĩ đến Enums?

private static void test() { 
    Animal animal = Animal.valueOf("Dog"); 
} 

enum Animal { 
    Dog, 
    Cat, 
    Cow, 
    Pig, 
    Rat, 
    Ant, 
    Gnu; 
} 
Các vấn đề liên quan