سؤال

أرغب في تنفيذ قائمة زجاجية تحتوي على واجهة متقدمة ومكتبات.

أنا أقرأ هنا:http://www.jroller.com/aalmiray/entry/glazedlists_groovy_not_your_regular

وبالنسبة لواجهة واحدة ، يبدو أن هذا ممكن بشكل رائع مع الكلمة الرئيسية "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 ASTYPE (الفصل) الطريقة ، التي تأخذ فقط فئة واحدة كوسيطة. لذلك لا يمكنك استخدامها مباشرة "كـ" مع أكثر من واجهة واحدة (إلا إذا كنت تتبع نهج FRM ودمج الواجهات في واجهة واحدة فائقة).

أتساءل عما إذا كنت تريد تنفيذ واجهتين أو أكثر على الطيران ، ولا تفضل "رمزًا صلبًا" مثل
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