PDF:

Làm nhanh việc viết mã Java trong Eclipse Galileo
Sử dụng bộ tạo mã toString() mới
Nathan A. Good
Kỹ sư trưởng, tư vấn
Freelance Developer
30 09 2010
Hãy tìm hiểu cách sử dụng khả năng tạo mã toString() mới trong Eclipse Galileo cùng với
các phương thức hashCode(), equals(), và quá trình tạo trình thiết đặt/thu nhận để giảm
bớt số lượng công việc xây dựng nền tảng của một lớp Java™ .
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.
Tổng quan về tạo mã
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 {
© Copyright IBM Corporation 2010
Làm nhanh việc viết mã Java trong Eclipse Galileo
Nhẫn hiệu đăng ký
Trang 1 của 12
developerWorks®
ibm.com/developerWorks/vn/
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.
Các cài đặt cho việc tạo mã
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.
Làm nhanh việc viết mã Java trong Eclipse Galileo
Trang 2 của 12
ibm.com/developerWorks/vn/
developerWorks®
Hình 1. Các lựa chọn của Java > Code Style > Code Templates
Mã hóa các thực hành tốt nhất của bạn
Là lãnh đạo kỹ thuật của vài dự án, tôi đã xác định một vài thực hành tốt nhất mà tôi muốn sử
dụng cho dự án của chúng tôi. Tôi đặt chúng trong khuôn mẫu của mã Java và làm chúng sẵn
sàng để cho các thành viên trong nhóm nhập khẩu.
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.
Làm nhanh việc viết mã Java trong Eclipse Galileo
Trang 3 của 12
developerWorks®
ibm.com/developerWorks/vn/
Hình 2. Các lựa chọn khuôn mẫu của Java > Editor > Code
Sử dụng bộ tạo mã toString()
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.
Làm nhanh việc viết mã Java trong Eclipse Galileo
Trang 4 của 12
ibm.com/developerWorks/vn/
developerWorks®
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]
Định dạng chuỗi
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:
Làm nhanh việc viết mã Java trong Eclipse Galileo
Trang 5 của 12
developerWorks®
ibm.com/developerWorks/vn/
1. Nhấn Edit ở bên cạnh danh sách thả xuống String format .
2. Nhấn New.
Hình 4. Thêm một định dạng mới
3. 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ứctoString() của đối tượng Automobile
Toyota Corolla 1993 (Automobile)
Làm việc với mảng
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.
Làm nhanh việc viết mã Java trong Eclipse Galileo
Trang 6 của 12
ibm.com/developerWorks/vn/
developerWorks®
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)
Hạn chế kết quả đầu ra
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.
Làm nhanh việc viết mã Java trong Eclipse Galileo
Trang 7 của 12
developerWorks®
ibm.com/developerWorks/vn/
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.
Làm nhanh việc viết mã Java trong Eclipse Galileo
Trang 8 của 12
ibm.com/developerWorks/vn/
developerWorks®
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ọ.
Làm nhanh việc viết mã Java trong Eclipse Galileo
Trang 9 của 12
developerWorks®
ibm.com/developerWorks/vn/
Kết luận
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.
Làm nhanh việc viết mã Java trong Eclipse Galileo
Trang 10 của 12
ibm.com/developerWorks/vn/
developerWorks®
Tài nguyê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.
Làm nhanh việc viết mã Java trong Eclipse Galileo
Trang 11 của 12
developerWorks®
ibm.com/developerWorks/vn/
Đôi nét về tác giả
Nathan A. Good
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ở
© Copyright IBM Corporation 2010
(www.ibm.com/legal/copytrade.shtml)
Nhẫn hiệu đăng ký
(www.ibm.com/developerworks/vn/ibm/trademarks/)
Làm nhanh việc viết mã Java trong Eclipse Galileo
Trang 12 của 12