Groovy 'AS' Ключевое слово для реализации 2+ интерфейсов

StackOverflow https://stackoverflow.com/questions/3078115

  •  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();
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top