Groovy 'AS' Ключевое слово для реализации 2+ интерфейсов
-
28-09-2019 - |
Вопрос
Я хотел бы реализовать глазурованный список, который имеет как продвинутный интерфейс Format, и WritableTableFormat.
Я читаю здесь:http://www.jroller.com/aalmiRay/entry/glazedlists_grovy_not_your_revular.
А для одного интерфейса кажется, что это возможно в Groovy с ключевым словом «As»:
# return new EventTableModel(linksList, [
# getColumnCount: {columnNames.size()},
# getColumnName: {index -> columnNames[index]},
# getColumnValue: {object, index ->
# object."${columnNames[index].toLowerCase()}"
# }] as TableFormat)
Это как-то возможно сделать это на два интерфейса? Если так, как?
Благодарю вас!
Миша
Решение
Вы можете создать новый интерфейс, который расширяет два интерфейса, которые вас интересуют.
interface PersonalizedTableFormat extends AdvancedTableFormat, WriteableTableFormat {
}
Вы можете отбрасывать объект, который вы возвращаетесь в новый интерфейс.
return object as PersonalizedTableFormat;
Другие советы
Ключевое слово «AS» - это просто модный способ вызовы Groovy's Астип (класс) Метод, который принимает только один класс в качестве аргумента. Поэтому вы не можете напрямую использовать «как» с более чем одним интерфейсом (если только вы не возьмете подход FRM и объединяете интерфейсы в одном Super Interface).
Интересно, хотите ли вы реализовать 2 или более интерфейсов на лету, и не предпочитаете «жесткий код», как
interface abc extends aaa,bbb,ccc {}
?
Может быть, вы можете попробовать следующий код:
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();