Pregunta

Me gustaría implementar una lista de esmaltado que tiene tanto una interfaz AdvancedTableFormat y WritableTableFormat.

Estoy leyendo aquí: http://www.jroller.com/aalmiray/entry/glazedlists_groovy_not_your_regular

y de una interfaz parece que esto es posible en Groovy con el "como" palabra clave:

# return new EventTableModel(linksList, [  
#       getColumnCount: {columnNames.size()},  
#       getColumnName: {index -> columnNames[index]},  
#       getColumnValue: {object, index ->  
#          object."${columnNames[index].toLowerCase()}"  
#       }] as TableFormat)

¿Es posible de alguna manera para hacer esto por dos interfaces? Si es así, ¿cómo?

Gracias!

Misha

¿Fue útil?

Solución

Se puede crear una nueva interfaz que extiende las dos interfaces que está interesado.

interface PersonalizedTableFormat extends AdvancedTableFormat, WriteableTableFormat {
}

Se puede convertir el objeto regresa a la nueva interfaz.

return object as PersonalizedTableFormat;

Otros consejos

El "como" palabra clave es sólo una forma elegante de invocar Groovy asType (Clase) método , que tiene sólo una única clase como un argumento. Por lo tanto no se puede utilizar directamente "como" con más de una interfaz (a menos que tome el enfoque de FRM y combinar las interfaces en una interfaz súper).

Me pregunto si se desea implementar 2 o más interfaces sobre la marcha, y no prefiero a 'codificar' como
interface abc extends aaa,bbb,ccc {}?

Puede ser que usted puede probar el siguiente código:

import static java.util.Collections.sort
def doClose(Closeable c){
    c.close();
}
def o = new Object()
o.metaClass{
    compare{Object a,String b-> return a.size() - b.size()};
    close{println 'Lights out - I am closing'};
}
o = new ProxyGenerator().instantiateDelegate([Comparator, Closeable], o)
def items = ['a', 'bbb', 'cc']
sort(items, o);
println items;
doClose(o);
println o.class.getInterfaces();
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top