Mẹo để tạo mã này sử dụng các tính năng mới đã giới thiệu trong Eclipse Galileo. Tuy nhiên, bạn có thể sử dụng vài kỹ thuật được nêu trong bài này — chẳng hạn tạo các trình thiết đặt và thu nhận — cũng như trong phiên bản cũ của Eclipse, chẳng hạn như Ganymede.
Trong số các tính năng mà tôi sử dụng hàng ngày trong Eclipse, thì các hạng mục trong thực đơn Source để tạo mã là đứng đầu danh sách. Tôi cần có một chút thời gian để tìm hiểu cách sử dụng chúng một cách hiệu quả, nhưng khi đã hiểu rõ, tôi có thể xây dựng các lớp Java rất nhanh.
Ví dụ khi tạo lớp mới, tôi không phải tốn thời gian để viết các trình thiết đặt và thu nhận (các trình phụ). Tôi không viết hầu hết các trình kiến thiết. Thay vào đó, tôi tạo lớp và nhanh chóng nhập các biến riêng tôi sẽ dùng trong lớp, như những biến trong Liệt kê 1.
Liệt kê 1. Các biến riêng
public
class Automobile { private String make; private String model; private String year; } |
Khi viết xong, tôi nhấn Source > Generate Getters and Setters, rồi chọn các biến riêng vừa nhập mà tôi muốn diễn tả khi dùng các trình phụ chung. Để khởi tạo vài biến trong các biến đó bằng trình kiết thiết, tôi nhấn Source > Generate Constructor using Fields để nhanh chóng tạo chúng. Bằng một vài cú nhấn chuột, tôi đã có một lớp gần như hoàn chỉnh, tuỳ thuộc vào những gì mà tôi muốn làm với lớp đó (xem Liệt kê 2). Điều hay nhất là mã vừa mới được tạo sẽ tôn trọng các quy tắc định dạng mã mà tôi đã thiết lập trong các lựa chọn Eclipse của mình.
Liệt kê 2. Trình kiến thiết tự động tạo mã và các trình phụ
public class Automobile {
private String make;
private String model;
private String year;
public String getMake() {
return make;
}
public Automobile(String make, String model, String year) {
super();
this.make = make;
this.model = model;
this.year = year;
}
public void setMake(String make) {
this.make = make;
}
public String getModel() {
return model;
}
public void setModel(String model) {
this.model = model;
}
public String getYear() {
return year;
}
public void setYear(String year) {
this.year = year;
}
} |
Ngoài các mã mà bạn có thể tạo với các mục trong thực đơn Source, bạn có thể tạo rất
nhiều mã bằng cách sử dụng phím tắt Ctrl+Space để viết nhiều khối mã phổ
biến. Để tìm ra các tên mà bạn cần sử dụng để tạo các khối riêng, hãy nhìn cửa sổ
Preferences. Ví dụ, bạn gõ chữ lazy, sau đó
nhấn Ctrl+Space để tạo mã Java mà bạn có thể sử dụng để tải mã lazy.
Bạn sửa đổi thiết lập đối với việc tạo mã các phương thức mới trong cửa sổ Preferences, dưới Java > Code Style > Code Templates.
Hình 1. Các lựa chọn của Java > Code Style > Code Templates
Các thiết lậpJava > Editor > Code Templates trong cửa sổ Preferences liệt kê các khuôn mẫu theo tên (xem hình 2). Hãy nhìn qua các khuôn mẫu đi với Eclipse. Bạn có thể bổ sung khuôn mẫu của riêng và thậm chí cũng có thể nhập khẩu chúng.
Hình 2. Các lựa chọn khuôn mẫu của Java > Editor > Code
Một tính năng mới trong Eclipse Galileo là khả năng tạo phương thức toString(). Theo mặc định, phương thức toString() in ra đại diện của lớp mà có thể không thực sự hiển thị các
thuộc tính ta muốn xem. Hãy xem xét phương thức main trong Liệt kê 3.
Liệt kê 3. In ứng dụng Automobile bằng cách sử dụng phương thức
toString()
public class Main {
public static void main(String[] args) {
Automobile auto = new Automobile("Toyota", "Corolla", "1993");
System.out.println(auto.toString());
}
} |
Kết quả của ứng dụng này được thấy trong liệt kê 4.
Liệt kê 4. Kết quả từ phương thức
Main
Automobile@77df38fd |
Trước khi có Galileo, tôi phải viết phương thức toString()
thủ công. Mặc dù đây không phải là điều cấm đối với lớp nhỏ này, nhưng nếu lớp có
nhiều trường hơn, thì sẽ mất thời gian. Tôi muốn làm nhiều thứ hơn là ghép đơn giản
các giá trị: Tôi muốn kiểm tra các giá trị rỗng. Có thể tôi muốn sử dụng tính năng
StringBuilder to để đạt hiệu suất tốt hơn. Nhưng với
Galileo, tôi có thể làm tất cả những điều này với Source > Generate
toString(), như thể hiện trong hình 3.
Hình 3. Tạo phương thức
toString()
Sau khi nhấn nút Finish, phương thức toString() mới
trông như liệt kê 5.
Liệt kê 5. Phương thức
toString() được tạo tự
động
... @Override public String toString() {
return "Automobile [" + (make != null ? "make=" + make + ", " : "") +
(model != null ? "model=" + model + ", " : "") + (year != null ? "year=" + year :
"") + "]"; } ... |
Bây giờ, khi phương thức main chạy, thì kết quả đầu ra trông như trong Liệt kê 6.
Liệt kê 6. Kết quả đầu ra của phương thức
toString() được
tự động tạo
Automobile [make=Toyota, model=Corolla, year=1993] |
Mặc dù kết quả đầu ra thấy trong liệt kê 6 có ý nghĩa mô tả nhiều hơn rất nhiều so
với kết quả đầu ra ban đầu trong liệt kê 4, nhưng nó thậm chí có thể tốt hơn để điều
chỉnh một chút định dạng để dễ đọc hơn, ví dụ như: "1993 Toyota Corolla
(Automobile)". Các khuôn mẫu tuỳ chỉnh cho phép bạn điều chỉnh kết quả đầu ra mà
phương thức toString() tạo nên.
Hãy hủy bỏ phương thức toString() và nhấn Source >
Generate toString() một lần nữa. Lần này bạn:
- Nhấn Edit ở bên cạnh danh sách thả xuống String format .
- Nhấn New.
Hình 4. Thêm một định dạng mới
- Gõ nhập một giá trị nào đó, chẳng hạn như
${member.value} ${otherMembers} (${object.className})tại mục Pattern, đặt tên cho nó và nhấn OK.
Với khuôn mẫu mới được lựa chọn, bạn nhấn OK tại mục Generate toString(). Mã mới trông giống như trong Liệt kê 7.
Liệt kê 7. Phương thức
toString() được cập nhật
... @Override public String toString() {
return (make != null ? make + " " : "") + (model != null ? model + " "
: "") + (year != null ? year : "") + " (Automobile)"; } ... |
Bây giờ, khi bạn chạy các phương thức main, kết quả đầu ra của toString() của đối
tượng Automobile trông giống như liệt kê 8.
Liệt kê 8. Kết quả từ phương thức
toString() của đối tượng
Automobile
Toyota Corolla 1993 (Automobile) |
Bộ tạo mã toString() cũng cho bạn khả năng xử lý các mảng.
Hãy xem xét liệt kê 9, trong đó cho thấy một mảng mới của chuỗi được gọi là tùy
chọn.
Liệt kê 9. Các tùy chọn mảng chuỗi
Automobile auto = new Automobile("Toyota", "Corolla", "1993");
String[] options =
new String[] { "Automatic Transmission", "Power Brakes", "Power Windows" };
// new generated method after adding
private String[] options; auto.setOptions(options);
System.out.println(auto.toString());
// prints this:
// Toyota Corolla [Ljava.lang.String;@defb836 1993 (Automobile) |
Thông thường, phương thức toString() nguyên thủy in ra thể
hiện của mảng giống như thứ tự ban đầu của đối tượng, không thực sự hiển thị nội
dung. Tuy nhiên, tùy chọn List contents of arrays instead of using native
toString thay đổi điều này. Với tùy chọn được lựa chọn, phương thức toString() có thể được tạo lại, và kết quả đầu ra mới trông
giống như liệt kê 10.
Liệt kê 10. Kết quả của phương thức
toString() được
tạo lại
Toyota Corolla [Automatic Transmission, Power Brakes, Power Windows] 1993 (Automobile) |
Nếu vài mảng có kích thước rất lớn, bạn có thể giới hạn nội dung in ra bằng cách chọn
Limit number of items in arrays/collections/maps và thiết lập giới hạn
(xem hình 5). Làm như vậy bạn ngăn phương thức toString()
khỏi in ra nhiều.
Hình 5. In nội dung mảng với hạn chế
Bạn hãy xem bảng liệt kê 11, là một ví dụ về giới hạn kết quả đầu ra được thiết lập với số lượng là 2.
Liệt kê 11. Hạn chế nội dung của mảng với số lượng 2
Toyota Corolla [Automatic Transmission, Power Brakes] 1993 (Automobile) |
Sử dụng hashCode()
và equals()
Sử dụng tạo mã hashCode() và equals() của Eclipse Galileo thực sự có ích khi bạn muốn tạo các quy tắc
cho phép các đối tượng của bạn đều dựa trên giá trị thực trong các trường. Điều này
khác với hành vi equals() mặc định vì thậm chí các đối
tượng với các giá trị giống nhau theo mặc định sẽ không bằng nhau. Ta hãy xem mã
trong liệt kê 12.
Liệt kê 12. Hành vi mặc định của phương thức
equals()
public class Main {
public static void main(String[] args) {
Automobile auto = new Automobile("Toyota", "Corolla", "1993");
String[] options = new String[] { "Automatic Transmission",
"Power Brakes", "Power Windows" };
auto.setOptions(options);
Automobile auto2 = new Automobile("Toyota", "Corolla", "1993");
String[] options2 = new String[] { "Automatic Transmission",
"Power Brakes", "Power Windows" };
auto2.setOptions(options2);
System.out.println("Autos 1 and 2 are equal(): " + auto.equals(auto2));
}
} |
Mặc dù tất cả các thuộc tính được thiết lập với các giá trị như nhau, nhưng mã in ra
kết quả Auto 1 and 2 are equal(): false khi được thực
hiện.
Để thay đổi hành vi này, hãy nhấn Source > Generate hashCode() and equals()
để tạo phiên bản mới của phương thức equals() nó so sánh
tất cả các trường, giống như liệt kê dưới đây.
Liệt kê 13. So sánh tất cả các trường ở phương thức
equals() mới
@Override public int hashCode() { // snipped... }
@Override public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null) return false;
if (getClass() != obj.getClass()) return false;
Automobile other = (Automobile) obj;
if (make == null){
if (other.make != null) return false;
} else if (!make.equals(other.make)) return false;
if (model == null) {
if (other.model != null) return false;
} else if (!model.equals(other.model)) return false;
if (!Arrays.equals(options, other.options)) return false;
if (year == null) {
if (other.year != null) return false;
} else if (!year.equals(other.year)) return false;
return true;
} |
Bây giờ, khi bạn thực thi mã, hai đối tượng được so sánh bằng cách sử dụng phương
thức equals() đè lên, và chúng đều bằng nhau.
Một tính năng mới trong Eclipse Galileo là khả năng tạo các khối cho câu lệnh if. Rất tuyệt khi có tính năng mới này nếu bạn chưa có tính
năng Source > Clean Up được cấu hình để thay đổi các câu lệnh dòng đơn
if cho các khối. Việc tránh các câu lệnh dòng đơn
if thường được coi là thực hành tốt nhất, vậy nhiều
người muốn chắc rằng họ có điều này trong mã của họ.
Các tính năng mới trong Galileo để tạo các phương thức toString() được thêm vào khả năng hiện có trong Eclipse để tạo rất nhiều
mã Java. Thông qua việc thực hành, bạn có thể học được mã nào cần gõ và mã nào bạn
có thể tạo, để ít phải làm việc hơn.
Học tập
- Hãy đọc cuốn "Sơ lược về Eclipse Galileo" để biết thêm thông tin về các tính năng của
Galileo.
- Xem trang "Danh sách các bài nên đọc về Eclipse."
- Duyệt tất cả các nội dung về Eclipse trên developerWorks.
- Theo dõi trang developerWorks trên
Twitter.
- Là người mới quen với Eclipse? Hãy đọc bài trên
trang developerWorks "Hãy bắt đầu với các nền của Eclipse" để
tìm hiểu nguồn gốc và kiến trúc của nó và cách mở rộng Eclipse với các trình cắm
thêm.
- Mở rộng kĩ năng về Eclipse của bạn bằng cách xem các tài nguyên dự án Eclipse của IBM
developerWorks.
- Để nghe các buổi phỏng vấn thú vị và các thảo luận
cho những nhà phát triển phần mềm, hãy xem developerWorks podcasts.
- Hãy theo sát các sự kiện kỹ thuật và trang tin của
developerWorks.
- Hãy xem và tìm hiểu về IBM và các công nghệ mã
nguồn mở và chức năng sản phẩm với trình diễn theo yêu cầu miễn phí trên
trang developerWorks.
- Xem các hội nghị sắp diễn ra, các triển lãm thương
mại, các tin tức trên Web và các sự kiện trên khắp thế giới, là mối quan
tâm của các nhà phát triển mã nguồn mở của IBM.
- Hãy thăm vùng mã nguồn mở của developerWorks để
có thêm thông tin hướng dẫn, các công cụ và cập nhật dự án, nhằm giúp bạn phát triển
với công nghệ mã nguồn mở và sử dụng chúng với các sản phẩm của IBM.
Lấy sản phẩm và công nghệ
- Hãy xem các mục tải được về công nghệ
mới nhất của Eclipse tại trang alphaWorks của IBM.
- Tải nền Eclipse và các dự án khác từ cơ
sở Eclípse.
- Tải các phiên bản đánh giá sản phẩm IBM hoặc
khám phá những thử nghiệm trực tuyến trong
SOA Sandbox và thử nghiệm các công cụ phát triển ứng dụng và các sản phẩm
đệm của DB2®, Lotus®, Rational®, Tivoli®
và WebSphere®.
- Hãy đổi mới dự án phát
triển mã nguồn mở tiếp theo của bạn với phần mềm dùng thử của IBM, đã sẵn cho
phép tải về hoặc trên DVD.
Thảo luận
-
Các nhóm tin của Nền tảng
Eclipse là điểm dừng chân đầu tiên của bạn để thảo luận về các vấn đề liên
quan đến Eclipse. (Lựa chọn này sẽ khởi chạy ứng dụng mặc định đọc tin tức Usenet
của bạn và mở eclipse.platform.)
-
Các nhóm tin về Eclipse cung cấp
nhiều tài nguyên cho những người quan tâm đến việc sử dụng và mở rộng
Eclipse.
- Hãy tham gia vào các blog của developerWorks và tham gia
vào cộng đồng developerWorks.
Nathan Good sống tại vùng Twin Cities của bang Minnesota. Về chuyên môn, ông làm công việc phát triển phần mềm, kiến trúc phần mềm và quản trị các hệ thống. Khi ông không viết phần mềm, ông rất thích xây dựng các máy chủ và máy tính cá nhân, đọc và làm việc với các công nghệ mới và cố gắng khuyến khích bạn bè của mình chuyển sang phần mềm mã nguồn mở