Có thể đặt tên tham số với giá trị mặc định trong groovy không? Kế hoạch của tôi là tạo một loại nhà máy đối tượng, có thể được gọi là không có đối số nào để có được một đối tượng với các giá trị mặc định. Ngoài ra, tôi cần các chức năng để thiết lập một cách rõ ràng bất kỳ params cho đối tượng. Tôi tin rằng điều này là có thể với các đối số từ khóa Python, ví dụ.thông số được đặt tên có giá trị mặc định trong groovy
Mã Tôi đang cố gắng với ngay bây giờ là một cái gì đó như dưới đây
// Factory method
def createFoo(name='John Doe', age=51, address='High Street 11') {
return new Foo(name, age, address)
}
// Calls
Foo foo1 = createFoo() // Create Foo with default values
Foo foo2 = createFoo(age:21) // Create Foo where age param differs from defaut
Foo foo3 = createFoo(name:'Jane', address:'Low Street 11') // You get the picture
// + any other combination available
Ứng dụng thực tế mà tôi đang làm việc trên sẽ có nhiều hơn nữa các thông số và do đó rất nhiều sự kết hợp cần thiết.
Cảm ơn
UPDATE:
Phương pháp nhà máy tôi đang lập kế hoạch là dành cho mục đích thử nghiệm. Không thể thực sự chạm vào lớp Foo thực tế và đặc biệt không phải là giá trị mặc định.
@dmahapatro và @codelarks trả lời dưới đây có một điểm tốt trong việc sử dụng Bản đồ làm thông số cung cấp cho tôi ý tưởng về giải pháp khả thi. Tôi có thể tạo một bản đồ với các giá trị mặc định mong muốn và ghi đè các giá trị cần thiết và chuyển nó tới phương thức nhà máy. Điều này có thể sẽ làm công việc và tôi sẽ đi với điều đó, trừ khi tôi nhận được một gợi ý của một cách tiếp cận tốt hơn.
cách tiếp cận hiện tại của tôi dưới đây
defaults = [ name:'john', age:61, address:'High Street']
@ToString(includeFields = true, includeNames = true)
class Foo {
// Can't touch this :)
def name = ''
def age = 0
def address = ''
}
def createFoo(Map params) {
return new Foo(params)
}
println createFoo(defaults)
println createFoo(defaults << [age:21])
println createFoo(defaults << [ name:'Jane', address:'Low Street'])
LƯU Ý: leftShift hoạt động (< <) đổi các bản đồ gốc, vì vậy trong ví dụ tuổi trên sẽ được 21 trong phương pháp gọi cuối cùng là tốt. Trong trường hợp của tôi, đây không phải là vấn đề vì bản đồ mặc định có thể được tạo mới mỗi lần trong phương thức thiết lập.
Không làm điều đó. 'mặc định' duy trì trạng thái trong trường hợp này. Làm cho nó địa phương. Xem cập nhật của tôi. – dmahapatro
Tôi đã nhận ra rằng, do đó lưu ý trong bản cập nhật của tôi. Dù sao, bằng cách sử dụng một bản đồ địa phương chức năng cho các giá trị mặc định là một cách tiếp cận tốt hơn nhiều. Cảm ơn vì tiền hỗ trợ. – kaskelotti