2013-02-19 30 views
6

tôi thấy thực sự mát mẻ mà người ta có thể làm:Groovy: nhà xây dựng tham số được đặt tên

class Foo { 
    String name 
} 

def foo = new Foo(name:"Test") 

Tuy nhiên, nó chỉ hoạt động khi tên tập tin của tôi phù hợp với tên lớp. Nếu tôi có một tập tin với một loạt các lớp học thích:

class AllClassesInOneFile { 
    class Bar {} 
    class Foo { 
     String name 
    } 
} 

def foo = new Foo(name:"Test") 

Bây giờ, nó không hoạt động nữa tôi nhận được một java.lang.IllegalArgumentException: sai số lập luận

Tôi tự hỏi nếu nó vẫn còn có thể để gọi kiểu tham số tham số có tên với các tập lệnh và các lớp lồng nhau.

Trân

Trả lời

6

Có vẻ như Groovy cần tham khảo rõ ràng để một thể hiện của lớp bên ngoài:

class Baz { 
    class Bar {} 
    class Foo { 
     String name 
    } 
} 

def baz = new Baz() 

def f = new Baz.Foo(baz, [name: "john doe"]) 

assert f.name == "john doe" 
+0

Đúng vậy, và nó kinda hút :(Tôi chắc chắn các nhà phát triển groovy có một tấn. Nhưng tôi phát hiện ra rằng không chỉ các tham số được đặt tên không hoạt động. Bất kỳ hàm khởi tạo nào cũng không hoạt động. Cảm ơn bạn đã giúp đỡ –

+9

@FuriousBob Nếu bạn làm cho các lớp lồng nhau của bạn tĩnh, bạn sẽ có thể tạo chúng mà không cần tạo một cá thể của lớp ngoài. –

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