2010-01-09 16 views
5

w php można zadeklarować funkcję w zasięgu globalnym z funkcją.brak zwykłej "funkcji" w java?

jest to niemożliwe w java? wygląda na to, że każda funkcja jest w klasie jako metoda. więc wszystko jest OOP w java? nie ma kodu proceduralnego?

+5

zadajesz pytanie średnio raz na godzinę. Myślę, że mądrze byłoby zainwestować w niektóre książki lub możliwość google ... – Pod

Odpowiedz

18

Najbliższą rzeczą, którą można uzyskać w funkcji "swobodnego unoszenia się", jest funkcja statyczna, którą można wywołać jako kwalifikowaną nazwą klasy, np.

public class Foo { 
    public static void bar(){} 
} 

... gdzie indziej

Foo.bar(); 

Można dodać trochę cukru składniowej do tego, aby wyglądać jak to, co masz na myśli:

import static Foo.bar; 

... gdzie indziej

bar(); 
+0

Możesz również zaimportować funkcję samodzielnie: 'import static packagename.Foo.bar;' Ale jeśli zrobisz to za dużo to może stać się zagmatwany. – MatrixFrog

+0

ahh, to właśnie miałem na myśli, dziękuję. –

3

Tak. Ale możesz zdefiniować metody statyczne, które ostatecznie mogą działać jako metody zawarte w klasie, ale można je wywoływać bez tworzenia instancji klasy. Oznacza to, że jeśli zdefiniujesz metodę bar jako static w klasie Foo, może ona zostać wywołana jako Foo.bar().

1

Tak, zgadza się. Java jest ściśle OOP.

3

Zgadza się, nie ma kodu proceduralnego, wszystko jest obiektem zdefiniowanym przez klasę (z wyjątkiem kilku prymitywnych typów danych). Można jednak użyć metody statyczne:

public class MyClass { 
    public static void callMe() { 
     System.out.println("HEY"); 
    } 
} 

public class MyOtherClass { 
    public void someMethod() { 
     MyClass.callMe(); 
    } 
} 

język JVM oparte Scala nie pozwalają na tworzenie higher-order functions, które można przekazać wokół jako wartości.

+0

Fajnie, więc Scala gen's up śmieci klasy anon dla ciebie. Naprawdę muszę usiąść i * przeczytać * moją cholerną książkę z serii Scala, aby zobaczyć, ile zamknięcia, "curry" i innych funkcji-rzeczy, w które się pakuje. – Roboprog

+0

Mam książkę i przeczytam ją, a to jest dość potężne język. Zauważyłem jednak, że dziesiątki operatorów skrótów, które reprezentują te nowe funkcje, są nieco mylące i trudne do zapamiętania. Wydaje się, że łatwiej jest zacząć pracę z Ruby (szkoda, że ​​jest dynamiczny i 50 razy wolniejszy niż w Javie, LOL). –

+0

Ciągle słyszę, że Java jest duża - N razy szybciej niż Ruby. To może być prawdziwe dla x + = y rodzajów elementów matematycznych/pierwotnych, ale to NIE jest to, co zmierzyłem dla pewnego podstawowego łamigłówki: http://roboprogs.com/devel/2009.12.html (oczywiście te " benchmark "korzysta tylko z kilku statycznych metod, jedynymi instancjami dłubiącymi wokół GC któregokolwiek z języków są wbudowane łańcuchy) – Roboprog

3

O tak, OO indeed. Możesz jednak kodować pseudo proceduralne rzeczy w statycznej metodzie.

3

Można dokonać metody statyczne połączenia bez tworzenia obiektu

public class MyClass{ 
    public static void m(){ 
     ... 
    } 
} 


MyClass.m(); 
3

Expanding na co wszyscy inni mówią, jeśli masz wiele takich funkcji, to jest wspólne dla grupy je razem w klasach które są pełne tylko statycznych metod, często nazywane "klasami użytkowymi". Pierwszy przykład, który przychodzi na myśl, to java.lang.Math, ale jest mnóstwo innych. Każda klasa z "Util" w nazwie prawdopodobnie podąża za tym wzorem.

-1

Nie należy jive well well OOP. Nadal możesz zdefiniować publiczną metodę statyczną i wywołać ją z dowolnego miejsca, o czym wspomnieli inni.

0

W świecie java wszystkie funkcje muszą być zadeklarowane w klasie, bez względu na wszystko. Witaj w OO world =)

0

Tak, możesz tworzyć funkcje statyczne, er, metody, ale musisz do nich wykonywać kodowane połączenia. Aby wybrać wywołanie zwrotne w czasie wykonywania, musisz utworzyć interfejs (nie wskaźnik funkcji, typ proceduralny lub delegować), a następnie zrobić fałszywą klasę (choć być może anonimową), aby ją "zaimplementować". Ciesz się pracą!

Albo cieszyć się humorystyczny satirazation: http://steve-yegge.blogspot.com/2006/03/execution-in-kingdom-of-nouns.html

Powiązane problemy