2012-01-17 22 views
5

Đối với các lớp mô hình MVC, setters của tôi trông giống như:Eclipse mẫu cho setter mà các cuộc gọi firePropertyChange()

enum BoundProperty {FIELD_NAME, ...} 

private Type fieldName; 

public setFieldName(Type newValue) { 
    Type oldValue = fieldName; 
    fieldName = newValue; 
    firePropertyChange(BoundProperty.FIELD_NAME, oldValue, newValue); 
} 

Cho một lĩnh vực, sản lượng này có thể được sản xuất từ ​​các setter autogenerated? Nếu không có cách nào để có được đầu ra này từ một mẫu?

Đầu ra nên CamelCase tên trường để tạo tên phương thức, do đó fieldName tạo setFieldName() và viết hoa tên trường để tạo thuộc tính enum.

Vì vậy, trườngName tạo ra FIELD_NAME (hoặc FIELDNAME cũng sẽ hoạt động).

+1

Dường như [câu trả lời này] (http://stackoverflow.com/a/7237108/274350) thực hiện một số nội dung tôi đang tìm kiếm. –

Trả lời

0

Các Fast Code Eclipse Plugin trông giống như một lựa chọn, nhưng tôi có một lỗi khi cài đặt nó mà tôi không có thời gian để theo đuổi và câu trả lời được cung cấp bởi người dùng qualidafial về vấn đề Useful Eclipse Java Code Templates làm mọi thứ tôi cần phải làm mà không đòi hỏi một plugin Eclipse.

1

Tôi có thể thấy thông báo này trên hộp thoại "Tạo getters/setters". Định dạng của getters/setters có thể được định cấu hình trên trang tùy chọn Mẫu mã. Bạn có thể đến đó (Setter Body dưới phần Code) và sửa đổi như dưới đây.

Type oldValue = ${field}; 
${field} = ${param}; 
firePropertyChange(BoundProperty.FIELD_NAME, oldValue, ${param}); 

Tuy nhiên, nó sẽ không tạo ra BoundProperty. Nó cần nghiên cứu thêm để tìm hiểu xem nó có khả thi hay không. Các liên kết này có thể giúp

Useful Eclipse Java Code TemplatesGetting started with Eclipse code templates

+0

Cảm ơn bạn đã trả lời. Tôi đã thử điều này, nhưng không đủ - Loại phải là loại trường và FIELD_NAME phải là phiên bản chữ hoa của fieldName. Có vẻ như không phải là cách để tìm ra những biến này từ các biến có sẵn trong màn hình Mẫu mã? –

+0

Tôi vừa thêm một số liên kết trong câu trả lời. Có thể bạn có thể nhận các biến mới ở đó không? – Reddy

+0

BTW bạn cần một cách để thêm các lĩnh vực mới trong enum là tốt? – Reddy

1

Tôi nghĩ rằng không có một cách đơn giản để thực hiện điều này thông qua mẫu Eclipse, chủ yếu liên quan đến việc camelCase/chữ hoa và tạo ra các giá trị enum. Bạn có thể kiểm tra hai câu hỏi này Is there a way to capitalize the first letter of a value of a variable in Eclipse (Helios) code templates, Programmatically add code templates? để tìm hiểu thêm chi tiết.

IMHO, cách tốt nhất để đạt được những gì bạn muốn là sử dụng Fast Code Eclipse Plugin và viết mẫu tốc độ cho plugin đó tạo tất cả mã từ các trường.

enum BoundProperty { 
#foreach ($field in ${fields}) 
    ${field.toUpperCase()} #if($foreach.hasNext), #end 
#end 
} 

#foreach ($field in ${fields}) 
    public ${field.type} get${field.name.substring(0,1).toUpperCase()}${field.name.substring(1)}(${field.type} newValue) { 
     Type oldValue = fieldName; 
     fieldName = newValue; 
     firePropertyChange(BoundProperty.${field.name.toUpperCase()}, oldValue, newValue);  
    } 
#end 

Hoặc thay đổi "getter_setter" template of that plugin.

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