Let’s say I have a Book class in Java that has an author and title
fields.
I think in Groovy I could write something like:
def book = new Book(title: “Foo”, author: “Bar”)
and Groovy would automatically construct the bean and call the setters
for
those fields. It’s just a shorthand way of constructing Java beans I
think.
Is there anything like this with the Java integration that JRuby has?
I
was hoping for something like:
book = Book.new({:title => “Foo”, :author => “Bar”)
but that doesn’t work. Anyone know of something like this?
Joe
There’s nothing built-in, but you can easily write your own.
module BeanLikeConstructor
def new(attrs = {})
super().tap |obj|
attrs.each do |k,v|
obj.send("#{k}=", v) if obj.respond_to?("#{k}=")
end
end
end
end
class Book
extend BeanLikeConstructor
end
book = Book.new(:title => “Foo”, :author => “Bar”)
/Nick
On Thu, Mar 31, 2011 at 11:05 AM, Nick S. [email protected]
wrote:
end
class Book
extend BeanLikeConstructor
end
book = Book.new(:title => “Foo”, :author => “Bar”)
I’m pretty sure many other ways would be there. I think of below:
proc = lambda {|k,v| b = Book.new; b.set_title(k); b.set_author(v); b}
book = proc.call(‘Foo’, ‘Bar’)
-Yoko
How cool, Nick.
Don’t mean to derail the thread, but I didn’t know about “tap”. Very
sweet
method!
Cheers,
–Bob
Thanks, that’s what I figured. I’m giving a little presentation on
JRuby
and I wanted to show all the handy features you can utilize. Would
there be
any desire to add this to the Java integration? Seems like a handy
thing to
have.
Joe