2012-02-19 9 views

Odpowiedz

9

Wszystko Java Objects rozszerzyć klasę Object. Więc można dokonać funkcja zaakceptować tablicę Object:

public void func(Object[] args) { 
} 

Albo jeśli chcesz być w stanie przekazać nic:

public void func(Object... args) { 
} 
5
public void omnivore(Object... args) { 
    // what now? 
} 

W Java zmienną każdego typu odniesienia (obiekty i macierzy), w tym te, w pewnej ogólną konstrukcję, nawet symboli możliwa jest przekazywane do parametru typ obiektu. Zmienna dowolnego typu pierwotnego może być autoboxed do odpowiadającego typu opakowania, który jest typem odniesienia, a więc może być przekazany jako obiekt. Tak więc, Object... zaakceptuje dowolną liczbę rzeczy.

3

Użyj tej składni:

void myMethod(Object... args) { 
    // Here, args is an array of java.lang.Object: 
    // you can take its length, get its elements with [i] operator, 
    // and so on. 
} 
1

Najbliższym dostaniesz to someMethod(Object ... args).

Ściśle, to nie akceptuje wszystkich typów argumentów. W szczególności nie akceptuje typów pierwotnych: te muszą być powiązane z odpowiednimi typami opakowania. Zwykle nie ma to znaczenia. Ale robi to, jeśli musisz rozróżnić typy pierwotne i opakowania w wywołanej metodzie.

+0

dzięki za odpowiedź. Właściwie eksperymentuję z twoim sugerowanym 'someMethod (Object ... args)' i wydaje się, że nie ma problemu z przekazaniem zarówno podstawowych, jak i typów obiektów. Użyłem tego jako testu i nie otrzymuję żadnych błędów: 'someMethod (99, 1.23," A String ", nowy String (" A Wrapper String "), anObject);' ale może Java owija pierwotnych dla mnie, którzy wie :) –

+1

@fleawhale - It ** to ** pakowanie ich dla ciebie (autoboxing). Ale moim celem jest to, że wywołana metoda nie może odróżnić przypadków, w których wywołujący podał prymitywną wartość, która była autoboxed od przypadku, w którym wyraźnie podał obiekt opakowania. –

+0

okrzyki, teraz ma to sens! –

Powiązane problemy