SORU
2 ŞUBAT 2010, Salı


Java Yöntemi Parametre olarak Geçirmek

Bir referans ile bir parametre olarak geçirmek için sabırsızlanıyorum. Java parametreleri gibi yöntemler, ancak vermeyen, alternatif almak istiyorum anlıyorum.

Arabirimler parametre olarak geçirme yöntemleri için alternatif söylendi ama bir arabirim referans bir yöntem olarak nasıl hareket edebileceğini anlamıyorum. Eğer doğru anladıysam bir arabirim sadece tanımlanan yöntemlerin soyut bir set. Birkaç farklı yöntem de aynı parametreleri ile aynı yöntem diyebiliriz çünkü her zaman tanımlanması gereken bir arayüz göndermek istemiyorum.

Yapmak istediğim buna benzer bir şey

public void setAllComponents(Component[] myComponentArray, Method myMethod) {
    for (Component leaf : myComponentArray) {
        if (leaf instanceof Container) { //recursive call if Container
            Container node = (Container) leaf;
            setAllComponents(node.getComponents(), myMethod);
        } //end if node
        myMethod(leaf);
    } //end looping through components
}

gibi çağırdı:

setAllComponents(this.getComponents(), changeColor());
setAllComponents(this.getComponents(), changeSize());

Şimdiden teşekkürler, Mac

CEVAP
2 ŞUBAT 2010, Salı


EditJava 8, lambda expressions other answers belirttiği gibi güzel bir çözüm. Cevap aşağıda Java 7 için yazılmış ve daha önce...


command pattern bir göz atın.

// NOTE: code not tested, but I believe this is valid java...
public class CommandExample 
{
    public interface Command 
    {
        public void execute(Object data);
    }

    public class PrintCommand implements Command 
    {
        public void execute(Object data) 
        {
            System.out.println(data.toString());
        }    
    }

    public static void callCommand(Command command, Object data) 
    {
        command.execute(data);
    }

    public static void main(String... args) 
    {
        callCommand(new PrintCommand(), "hello world");
    }
}

Düzenleme:Pete Kirkham points out, Bu Visitor kullanmadan yapmanın başka bir yolu daha var. Ziyaretçi yaklaşımdır biraz daha fazla yer - bezleri çıkarmak lazım ziyaretçi-aware ile bir acceptVisitor() yöntem - ama gerekirse traverse daha karmaşık bir nesne grafiği o zaman değer inceleniyor.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • CasinoRoyaleMovie's channel

    CasinoRoyale

    1 AĞUSTOS 2006
  • natescamp

    natescamp

    30 NİSAN 2009
  • pleated-jeans

    pleated-jean

    6 HAZİRAN 2013