Return type | Name and parameters |
---|---|
void
|
addShutdownHook(Closure closure)
Allows the usage of addShutdownHook without getting the runtime first. |
boolean
|
any()
Iterates over the elements of a collection, and checks whether at least one element is true according to the Groovy Truth. |
boolean
|
any(Closure predicate)
Iterates over the contents of an object or collection, and checks whether a predicate is valid for at least one element. |
boolean
|
asBoolean()
Coerce an object instance to a boolean value. |
Object
|
asType(Class clazz)
Converts the given array to either a List, Set, or SortedSet. |
Object
|
average()
Averages the items in an array. |
Collection
|
collect()
Iterates through this aggregate Object transforming each item into a new value using Closure.IDENTITY as a transformer, basically returning a list of items copied from the original object. |
List
|
collect(Closure transform)
Iterates through this aggregate Object transforming each item into a new value using the transform closure, returning a list of transformed values.
|
Collection
|
collect(Collection collector, Closure transform)
Iterates through this aggregate Object transforming each item into a new value using the transform closure
and adding it to the supplied collector .
|
boolean
|
contains(Object value)
Checks whether the array contains the given value. |
Number
|
count(Object value)
Counts the number of occurrences of the given value inside this array. |
String
|
dump()
Generates a detailed dump string of an object showing its class, hashCode and fields. |
Object
|
each(Closure closure)
Iterates through an aggregate type or data structure, passing each item to the given closure. |
Object
|
eachWithIndex(Closure closure)
Iterates through an aggregate type or data structure, passing each item and the item's index (a counter starting at zero) to the given closure. |
boolean
|
equals(List right)
Determines if the contents of this array are equal to the contents of the given list, in the same order. |
boolean
|
every()
Iterates over every element of a collection, and checks whether all elements are true according to the Groovy Truth.
|
boolean
|
every(Closure predicate)
Used to determine if the given predicate closure is valid (i.e. returns true for all items in this data structure).
|
Object
|
find()
Finds the first item matching the IDENTITY Closure (i.e. matching Groovy truth). |
Object
|
find(Closure closure)
Finds the first value matching the closure condition. |
Collection
|
findAll()
Finds all items matching the IDENTITY Closure (i.e. matching Groovy truth). |
Collection
|
findAll(Closure closure)
Finds all items matching the closure condition. |
int
|
findIndexOf(Closure condition)
Iterates over the elements of an aggregate of items and returns the index of the first item that matches the condition specified in the closure. |
int
|
findIndexOf(int startIndex, Closure condition)
Iterates over the elements of an aggregate of items, starting from a specified startIndex, and returns the index of the first item that matches the condition specified in the closure. |
List
|
findIndexValues(Closure condition)
Iterates over the elements of an aggregate of items and returns the index values of the items that match the condition specified in the closure. |
List
|
findIndexValues(Number startIndex, Closure condition)
Iterates over the elements of an aggregate of items, starting from a specified startIndex, and returns the index values of the items that match the condition specified in the closure. |
int
|
findLastIndexOf(Closure condition)
Iterates over the elements of an aggregate of items and returns the index of the last item that matches the condition specified in the closure. |
int
|
findLastIndexOf(int startIndex, Closure condition)
Iterates over the elements of an aggregate of items, starting from a specified startIndex, and returns the index of the last item that matches the condition specified in the closure. |
Object
|
findResult(Closure condition)
Treats the object as iterable, iterating through the values it represents and returns the first non-null result obtained from calling the closure, otherwise returns null. |
Object
|
findResult(Object defaultResult, Closure condition)
Treats the object as iterable, iterating through the values it represents and returns the first non-null result obtained from calling the closure, otherwise returns the defaultResult. |
Collection
|
flatten()
Flatten an array. |
Object
|
getAt(String property)
Allows the subscript operator to be used to lookup dynamic property values. |
MetaClass
|
getMetaClass()
Obtains a MetaClass for an object either from the registry or in the case of a GroovyObject from the object itself. |
List
|
getMetaPropertyValues()
Retrieves the list of MetaProperty objects for 'self' and wraps it in a list of PropertyValue objects that additionally provide the value for each property of 'self'. |
Map
|
getProperties()
Convenience method that calls Object#getMetaPropertyValues()(self) and provides the data in form of simple key/value pairs, i.e. without type() information. |
Collection
|
grep()
Iterates over the collection of items which this Object represents and returns each item that matches using the IDENTITY Closure as a filter - effectively returning all elements which satisfy Groovy truth. |
Collection
|
grep(Object filter)
Iterates over the collection of items which this Object represents and returns each item that matches the given filter - calling the Object#isCase(java.lang.Object)
method used by switch statements.
|
Map
|
groupBy(Object closures)
Sorts all array members into (sub)groups determined by the supplied mapping closures as per the Iterable variant of this method. |
Map
|
groupBy(List closures)
Sorts all array members into (sub)groups determined by the supplied mapping closures as per the list variant of this method. |
MetaProperty
|
hasProperty(String name)
Returns true of the implementing MetaClass has a property of the given name Note that this method will only return true for realised properties and does not take into account implementation of getProperty or propertyMissing |
Object
|
identity(Closure closure)
Allows the closure to be called for the object reference self. |
Object
|
inject(Closure closure)
Iterates through the given Object, passing in the first value to the closure along with the first item. |
Object
|
inject(Object initialValue, Closure closure)
Iterates through the given Object, passing in the initial value to the closure along with the first item. |
String
|
inspect()
Inspects returns the String that matches what would be typed into a terminal to create this object. |
Object
|
invokeMethod(String method, Object arguments)
Provide a dynamic method invocation method which can be overloaded in classes to implement dynamic proxies easily. |
boolean
|
is(Object other)
Identity check. |
boolean
|
isCase(Object switchValue)
Method for overloading the behavior of the 'case' method in switch statements. |
Iterator
|
iterator()
Attempts to create an Iterator for the given object by first converting it to a Collection. |
String
|
join(String separator)
Concatenates the toString() representation of each
items in this array, with the given String as a separator between each
item.
|
MetaClass
|
metaClass(Closure closure)
Sets/updates the metaclass for a given object to a closure. |
void
|
print(PrintWriter out)
Print to a console in interactive format. |
void
|
print(Object value)
Print a value formatted Groovy style to self if it is a Writer, otherwise to the standard output stream. |
void
|
printf(String format, Object arg)
Prints a formatted string using the specified format string and arguments. |
void
|
printf(String format, Object[] values)
Printf to the standard output stream. |
void
|
println()
Print a linebreak to the standard output stream. |
void
|
println(PrintWriter out)
Print to a console in interactive format. |
void
|
println(Object value)
Print a value formatted Groovy style (followed by a newline) to self if it is a Writer, otherwise to the standard output stream. |
void
|
putAt(String property, Object newValue)
Allows the subscript operator to be used to set dynamically named property values. |
List
|
respondsTo(String name)
Returns an object satisfying Groovy truth if the implementing MetaClass responds to a method with the given name regardless of the arguments. |
List
|
respondsTo(String name, Object[] argTypes)
Returns an object satisfying Groovy truth if the implementing MetaClass responds to a method with the given name and arguments types. |
void
|
setMetaClass(MetaClass metaClass)
Set the metaclass for an object. |
int
|
size()
Provide the standard Groovy size() method for an array.
|
static void
|
sleep(long milliseconds)
Sleep for so many milliseconds, even if interrupted. |
static void
|
sleep(long milliseconds, Closure onInterrupt)
Sleep for so many milliseconds, using a given closure for interrupt processing. |
Collection
|
split(Closure closure)
Splits all items into two lists based on the closure condition. |
String
|
sprintf(String format, Object arg)
Returns a formatted string using the specified format string and arguments. |
String
|
sprintf(String format, Object[] values)
Sprintf to a string. |
Stream
|
stream()
Returns a sequential Stream containing a single element. |
Object
|
sum()
Sums the items in an array. |
Object
|
sum(Object initialValue)
Sums the items in an array, adding the result to some initial value. |
Object
|
tap(Closure closure)
Allows the closure to be called for the object reference self (similar to with and always returns self.
|
String
|
toArrayString()
Returns the string representation of the given array. |
SpreadMap
|
toSpreadMap()
Creates a spreadable map from this array. |
String
|
toString()
Returns the string representation of this array's contents. |
Object
|
use(Class categoryClass, Closure closure)
Scoped use method |
Object
|
use(Object[] array)
Allows you to use a list of categories, specifying the list as varargs. |
Object
|
use(List categoryClassList, Closure closure)
Scoped use method with list of categories. |
Object
|
with(boolean returning, Closure closure)
Allows the closure to be called for the object reference self. |
Object
|
with(Closure closure)
Allows the closure to be called for the object reference self. |
Object
|
withTraits(Class traits)
Dynamically wraps an instance into something which implements the supplied trait classes. |
Allows the usage of addShutdownHook without getting the runtime first.
closure
- the shutdown hook actionIterates over the elements of a collection, and checks whether at least
one element is true according to the Groovy Truth.
Equivalent to self.any({element ->
element})
assert [false, true].any() assert [0, 1].any() assert ![0, 0].any()
Iterates over the contents of an object or collection, and checks whether a predicate is valid for at least one element.
assert [1, 2, 3].any { it == 2 }
assert ![1, 2, 3].any { it >
3 }
predicate
- the closure predicate used for matchingCoerce an object instance to a boolean value. An object is coerced to true if it's not null, to false if it is null.
Converts the given array to either a List, Set, or SortedSet. If the given class is something else, the call is deferred to Object#asType(Class).
clazz
- the desired classAverages the items in an array. This is equivalent to invoking the "plus" method on all items in the array and then dividing by the total count using the "div" method for the resulting sum.
assert 3 == ([1, 2, 6] as Integer[]).average()
Iterates through this aggregate Object transforming each item into a new value using Closure.IDENTITY as a transformer, basically returning a list of items copied from the original object.
assert [1,2,3] == [1,2,3].iterator().collect()
Iterates through this aggregate Object transforming each item into a new value using the
transform
closure, returning a list of transformed values.
Example:
def list = [1, 'a', 1.23, true ] def types = list.collect { it.class } assert types == [Integer, String, BigDecimal, Boolean]
transform
- the closure used to transform each item of the aggregate objectIterates through this aggregate Object transforming each item into a new value using the transform
closure
and adding it to the supplied collector
.
collector
- the Collection to which the transformed values are addedtransform
- the closure used to transform each item of the aggregate objectChecks whether the array contains the given value.
value
- the value being searched forCounts the number of occurrences of the given value inside this array.
Comparison is done using Groovy's == operator (using
compareTo(value) == 0
or equals(value)
).
value
- the value being searched forGenerates a detailed dump string of an object showing its class, hashCode and fields.
Iterates through an aggregate type or data structure, passing each item to the given closure. Custom types may utilize this method by simply providing an "iterator()" method. The items returned from the resulting iterator will be passed to the closure.
String result = '' ['a', 'b', 'c'].each{ result += it } assert result == 'abc'
closure
- the closure applied on each element foundIterates through an aggregate type or data structure, passing each item and the item's index (a counter starting at zero) to the given closure.
String result = ''
['a', 'b', 'c'].eachWithIndex{ letter, index ->
result += "$index:$letter" }
assert result == '0:a1:b2:c'
closure
- a Closure to operate on each itemDetermines if the contents of this array are equal to the
contents of the given list, in the same order. This returns
false
if either collection is null
.
right
- the List being comparedIterates over every element of a collection, and checks whether all
elements are true
according to the Groovy Truth.
Equivalent to self.every({element
->
element})
assert [true, true].every() assert [1, 1].every() assert ![1, 0].every()
Used to determine if the given predicate closure is valid (i.e. returns
true
for all items in this data structure).
A simple example for a list:
def list = [3,4,5]
def greaterThanTwo = list.every { it >
2 }
predicate
- the closure predicate used for matchingFinds the first item matching the IDENTITY Closure (i.e. matching Groovy truth).
Example:
def items = [null, 0, 0.0, false, '', [], 42, 43] assert items.find() == 42
Finds the first value matching the closure condition.
def numbers = [1, 2, 3]
def result = numbers.find { it >
1}
assert result == 2
closure
- a closure conditionFinds all items matching the IDENTITY Closure (i.e. matching Groovy truth).
Example:
def items = [1, 2, 0, false, true, '', 'foo', [], [4, 5], null] assert items.findAll() == [1, 2, true, 'foo', [4, 5]]
Finds all items matching the closure condition.
closure
- a closure conditionIterates over the elements of an aggregate of items and returns the index of the first item that matches the condition specified in the closure.
condition
- the matching conditionIterates over the elements of an aggregate of items, starting from a
specified startIndex, and returns the index of the first item that matches the
condition specified in the closure.
Example (aggregate is ChronoUnit
enum values):
import java.time.temporal.ChronoUnit def nameStartsWithM = { it.name().startsWith('M') } def first = ChronoUnit.findIndexOf(nameStartsWithM) def second = ChronoUnit.findIndexOf(first + 1, nameStartsWithM) def third = ChronoUnit.findIndexOf(second + 1, nameStartsWithM) Set units = [first, second, third] assert !units.contains(-1) // should have found 3 of MICROS, MILLIS, MINUTES, MONTHS, ... assert units.size() == 3 // just check size so as not to rely on order
startIndex
- start matching from this indexcondition
- the matching conditionIterates over the elements of an aggregate of items and returns the index values of the items that match the condition specified in the closure.
condition
- the matching conditionIterates over the elements of an aggregate of items, starting from a specified startIndex, and returns the index values of the items that match the condition specified in the closure.
startIndex
- start matching from this indexcondition
- the matching conditionIterates over the elements of an aggregate of items and returns
the index of the last item that matches the condition specified in the closure.
Example (aggregate is ChronoUnit
enum values):
import java.time.temporal.ChronoUnit def nameStartsWithM = { it.name().startsWith('M') } def first = ChronoUnit.findIndexOf(nameStartsWithM) def last = ChronoUnit.findLastIndexOf(nameStartsWithM) // should have found 2 unique index values for MICROS, MILLIS, MINUTES, MONTHS, ... assert first != -1 && last != -1 && first != last
condition
- the matching conditionIterates over the elements of an aggregate of items, starting from a specified startIndex, and returns the index of the last item that matches the condition specified in the closure.
startIndex
- start matching from this indexcondition
- the matching conditionTreats the object as iterable, iterating through the values it represents and returns the first non-null result obtained from calling the closure, otherwise returns null.
int[] numbers = [1, 2, 3] assert numbers.findResult { if(it>
1) return it } == 2 assert numbers.findResult { if(it>
4) return it } == null
condition
- a closure that returns a non-null value to indicate that processing should stop and the value should be returnedTreats the object as iterable, iterating through the values it represents and returns the first non-null result obtained from calling the closure, otherwise returns the defaultResult.
int[] numbers = [1, 2, 3] assert numbers.findResult(5) { if(it>
1) return it } == 2 assert numbers.findResult(5) { if(it>
4) return it } == 5
defaultResult
- an Object that should be returned if all closure results are nullcondition
- a closure that returns a non-null value to indicate that processing should stop and the value should be returnedFlatten an array. This array and any nested arrays or collections have their contents (recursively) added to the new collection.
Allows the subscript operator to be used to lookup dynamic property values.
bean[somePropertyNameExpression]
. The normal property notation
of groovy is neater and more concise but only works with compile-time known
property names.
property
- the property name of interestObtains a MetaClass for an object either from the registry or in the case of a GroovyObject from the object itself.
Retrieves the list of MetaProperty objects for 'self' and wraps it in a list of PropertyValue objects that additionally provide the value for each property of 'self'.
Convenience method that calls Object#getMetaPropertyValues()(self) and provides the data in form of simple key/value pairs, i.e. without type() information.
Iterates over the collection of items which this Object represents and returns each item that matches using the IDENTITY Closure as a filter - effectively returning all elements which satisfy Groovy truth.
Example:
def items = [1, 2, 0, false, true, '', 'foo', [], [4, 5], null] assert items.grep() == [1, 2, true, 'foo', [4, 5]]
Iterates over the collection of items which this Object represents and returns each item that matches
the given filter - calling the Object#isCase(java.lang.Object)
method used by switch statements. This method can be used with different
kinds of filters like regular expressions, classes, ranges etc.
Example:
def list = ['a', 'b', 'aa', 'bc', 3, 4.5] assert list.grep( ~/a+/ ) == ['a', 'aa'] assert list.grep( ~/../ ) == ['aa', 'bc'] assert list.grep( Number ) == [ 3, 4.5 ] assert list.grep{ it.toString().size() == 1 } == [ 'a', 'b', 3 ]
filter
- the filter to perform on the object (using the Object#isCase(java.lang.Object) method)Sorts all array members into (sub)groups determined by the supplied mapping closures as per the Iterable variant of this method.
closures
- an array of closures, each mapping entries on keysSorts all array members into (sub)groups determined by the supplied mapping closures as per the list variant of this method.
closures
- a list of closures, each mapping entries on keysReturns true of the implementing MetaClass has a property of the given name
Note that this method will only return true for realised properties and does not take into account implementation of getProperty or propertyMissing
name
- The name of the property of interestAllows the closure to be called for the object reference self. Synonym for 'with()'.
closure
- the closure to call on the objectIterates through the given Object, passing in the first value to the closure along with the first item. The result is passed back (injected) into the closure along with the second item. The new result is injected back into the closure along with the third item and so on until further iteration of the object is not possible. Also known as foldLeft in functional parlance.
closure
- a closureIterates through the given Object, passing in the initial value to the closure along with the first item. The result is passed back (injected) into the closure along with the second item. The new result is injected back into the closure along with the third item and so on until further iteration of the object is not possible. Also known as foldLeft in functional parlance.
initialValue
- some initial valueclosure
- a closureInspects returns the String that matches what would be typed into a terminal to create this object.
->
[1, "hello"]Provide a dynamic method invocation method which can be overloaded in classes to implement dynamic proxies easily.
method
- the name of the method to callarguments
- the arguments to useIdentity check. Since == is overridden in Groovy with the meaning of equality
we need some fallback to check for object identity. Invoke using the
'is' method, like so: def same = this.is(that)
other
- an object to compare identity withMethod for overloading the behavior of the 'case' method in switch statements. The default implementation handles arrays types but otherwise simply delegates to Object#equals, but this may be overridden for other types. In this example:
switch( a ) { case b: //some code }"some code" is called when
b.isCase( a )
returns
true
.
switchValue
- the switch valueAttempts to create an Iterator for the given object by first converting it to a Collection.
Concatenates the toString()
representation of each
items in this array, with the given String as a separator between each
item.
separator
- a String separatorSets/updates the metaclass for a given object to a closure.
closure
- the closure representing the new metaclassPrint to a console in interactive format.
out
- the PrintWriter used for printingPrint a value formatted Groovy style to self if it is a Writer, otherwise to the standard output stream.
value
- the value to printPrints a formatted string using the specified format string and arguments.
Examples:
printf ( "Hello, %s!\n" , [ "world" ] as String[] ) printf ( "Hello, %s!\n" , [ "Groovy" ]) printf ( "%d + %d = %d\n" , [ 1 , 2 , 1+2 ] as Integer[] ) printf ( "%d + %d = %d\n" , [ 3 , 3 , 3+3 ]) ( 1..5 ).each { printf ( "-- %d\n" , [ it ] as Integer[] ) } ( 1..5 ).each { printf ( "-- %d\n" , [ it ] as int[] ) } ( 0x41..0x45 ).each { printf ( "-- %c\n" , [ it ] as char[] ) } ( 07..011 ).each { printf ( "-- %d\n" , [ it ] as byte[] ) } ( 7..11 ).each { printf ( "-- %d\n" , [ it ] as short[] ) } ( 7..11 ).each { printf ( "-- %d\n" , [ it ] as long[] ) } ( 7..11 ).each { printf ( "-- %5.2f\n" , [ it ] as float[] ) } ( 7..11 ).each { printf ( "-- %5.2g\n" , [ it ] as double[] ) }
format
- A format stringarg
- Argument which is referenced by the format specifiers in the format
string. The type of arg
should be one of Object[], List,
int[], short[], byte[], char[], boolean[], long[], float[], or double[].Printf to the standard output stream.
format
- a format stringvalues
- values referenced by the format specifiers in the format stringPrint a linebreak to the standard output stream.
Print to a console in interactive format.
out
- the PrintWriter used for printingPrint a value formatted Groovy style (followed by a newline) to self if it is a Writer, otherwise to the standard output stream.
value
- the value to printAllows the subscript operator to be used to set dynamically named property values.
bean[somePropertyNameExpression] = foo
. The normal property notation
of groovy is neater and more concise but only works with property names which
are known at compile time.
property
- the name of the property to setnewValue
- the value to setReturns an object satisfying Groovy truth if the implementing MetaClass responds to a method with the given name regardless of the arguments.
Note that this method's return value is based on realised methods and does not take into account objects or classes that implement invokeMethod or methodMissing
This method is "safe" in that it will always return a value and never throw an exception
name
- The name of the method of interestReturns an object satisfying Groovy truth if the implementing MetaClass responds to a method with the given name and arguments types.
Note that this method's return value is based on realised methods and does not take into account objects or classes that implement invokeMethod or methodMissing
This method is "safe" in that it will always return a value and never throw an exception
name
- The name of the method of interestargTypes
- The argument types to match againstSet the metaclass for an object.
metaClass
- the new metaclass valueProvide the standard Groovy size()
method for an array.
Sleep for so many milliseconds, even if interrupted.
milliseconds
- the number of milliseconds to sleepSleep for so many milliseconds, using a given closure for interrupt processing.
milliseconds
- the number of milliseconds to sleeponInterrupt
- interrupt handler, InterruptedException is passed to the Closure
as long as it returns false, the sleep continuesSplits all items into two lists based on the closure condition. The first list contains all items matching the closure expression. The second list all those that don't.
closure
- a closure conditionReturns a formatted string using the specified format string and arguments.
format
- A format stringarg
- Argument which is referenced by the format specifiers in the format
string. The type of arg
should be one of Object[], List,
int[], short[], byte[], char[], boolean[], long[], float[], or double[].Sprintf to a string.
format
- a format stringvalues
- values referenced by the format specifiers in the format stringReturns a sequential Stream containing a single element.
def item = 'string' assert item.stream().toList() == ['string'] assert item.stream().findFirst().isPresent()
Sums the items in an array. This is equivalent to invoking the "plus" method on all items in the array.
Sums the items in an array, adding the result to some initial value.
initialValue
- the items in the array will be summed to this initial valueAllows the closure to be called for the object reference self (similar
to with
and always returns self.
Any method invoked inside the closure will first be invoked on the self reference. For instance, the following method calls to the append() method are invoked on the StringBuilder instance:
def b = new StringBuilder().tap { append('foo') append('bar') } assert b.toString() == 'foobar'This is commonly used to simplify object creation, such as this example:
def p = new Person().tap { firstName = 'John' lastName = 'Doe' }
closure
- the closure to call on the objectReturns the string representation of the given array. The string
displays the contents of the array, similar to an array literal, i.e.
{1, 2, "a"}
.
Creates a spreadable map from this array.
Returns the string representation of this array's contents.
Scoped use method
categoryClass
- a category class to useclosure
- the closure to invoke with the category in placeAllows you to use a list of categories, specifying the list as varargs.
use(CategoryClass1, CategoryClass2) { ... }
This method saves having to wrap the category
classes in a list.
array
- a list of category classes and a ClosureScoped use method with list of categories.
categoryClassList
- a list of category classesclosure
- the closure to invoke with the categories in placeAllows the closure to be called for the object reference self.
Any method invoked inside the closure will first be invoked on the self reference. For example, the following method calls to the append() method are invoked on the StringBuilder instance and then, because 'returning' is true, the self instance is returned:def b = new StringBuilder().with(true) { append('foo') append('bar') } assert b.toString() == 'foobar'The returning parameter is commonly set to true when using with to simplify object creation, such as this example:
def p = new Person().with(true) { firstName = 'John' lastName = 'Doe' }Alternatively, 'tap' is an alias for 'with(true)', so that method can be used instead. The other main use case for with is when returning a value calculated using self as shown here:
def fullName = person.with(false){ "$firstName $lastName" }Alternatively, 'with' is an alias for 'with(false)', so the boolean parameter can be omitted instead.
returning
- if true, return the self object; otherwise, the result of calling the closureclosure
- the closure to call on the objectAllows the closure to be called for the object reference self.
Any method invoked inside the closure will first be invoked on the self reference. For instance, the following method calls to the append() method are invoked on the StringBuilder instance:
def b = new StringBuilder().with { append('foo') append('bar') return it } assert b.toString() == 'foobar'This is commonly used to simplify object creation, such as this example:
def p = new Person().with { firstName = 'John' lastName = 'Doe' return it }The other typical usage, uses the self object while creating some value:
def fullName = person.with{ "$firstName $lastName" }
closure
- the closure to call on the objectDynamically wraps an instance into something which implements the supplied trait classes. It is guaranteed that the returned object will implement the trait interfaces, but the original type of the object is lost (replaced with a proxy).
traits
- a list of trait classes