7
我正在實現一個接口,現在我想在classpath中獲得這個接口的所有實現。這是可能的還是我應該做別的事情?如何在groovy項目中的classpath中找到接口的所有實現?
我正在實現一個接口,現在我想在classpath中獲得這個接口的所有實現。這是可能的還是我應該做別的事情?如何在groovy項目中的classpath中找到接口的所有實現?
您可以使用Reflections library這種事情,即;找到org.codehaus.groovy
其中實現Iterator
接口的所有類,你可以這樣做:
@Grab('org.slf4j:slf4j-api:1.7.5')
@Grab('org.reflections:reflections:0.9.9-RC1')
import org.reflections.*
new Reflections('org.codehaus.groovy').getSubTypesOf(Iterator).each {
println it.name
}
它打印:
org.codehaus.groovy.runtime.StringGroovyMethods$1
org.codehaus.groovy.runtime.SwingGroovyMethods$7
org.codehaus.groovy.util.ArrayIterator
org.codehaus.groovy.runtime.metaclass.ConcurrentReaderHashMap$KeyIterator
org.codehaus.groovy.control.CompilationUnit$9
org.codehaus.groovy.runtime.SqlGroovyMethods$ResultSetMetaDataIterator
org.codehaus.groovy.runtime.SwingGroovyMethods$1
org.codehaus.groovy.util.ManagedLinkedList$Iter
org.codehaus.groovy.runtime.SwingGroovyMethods$3
org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl$2
org.codehaus.groovy.runtime.SwingGroovyMethods$6
org.codehaus.groovy.ant.FileIterator
org.codehaus.groovy.runtime.IOGroovyMethods$3
org.codehaus.groovy.runtime.DefaultGroovyMethods$DropWhileIterator
org.codehaus.groovy.runtime.DefaultGroovyMethods$TakeIterator
org.codehaus.groovy.runtime.DefaultGroovyMethods$3
org.codehaus.groovy.runtime.SwingGroovyMethods$5
org.codehaus.groovy.runtime.SwingGroovyMethods$2
org.codehaus.groovy.runtime.metaclass.ConcurrentReaderHashMap$HashIterator
org.codehaus.groovy.runtime.metaclass.ConcurrentReaderHashMap$ValueIterator
org.codehaus.groovy.runtime.XmlGroovyMethods$1
org.codehaus.groovy.runtime.SwingGroovyMethods$4
org.codehaus.groovy.runtime.IOGroovyMethods$2
org.codehaus.groovy.runtime.ReverseListIterator
org.codehaus.groovy.runtime.DefaultGroovyMethods$TakeWhileIterator