używam refleksji do wywołania metody na a class that is dynamically constructed at runtime:wywołanie metody poprzez odbicie, gdy argument jest typu Object []
public String createJDBCProvider(Object[] args)
Oto jak:
Method m = adminTask.getClass().getMethod("createJDBCProvider", Object[].class);
id = (String) m.invoke(adminTask, new Object[]{ "a", "b", "c" });
IDEA ostrzega mnie, że jestem winny redundant array creation for calling varargs method
.
Metoda, którą sprawdzam, w rzeczywistości zajmuje Object[]
, a nie Object ...
, ale prawdopodobnie są one równoważne i wymienne, więc myślę, że podążam naprzód.
W czasie wykonywania otrzymuję:
java.lang.IllegalArgumentException: wrong number of arguments
Wydaje się więc, że, być może, mój Object[]
jest przekazywana jako ciąg Object
s. Czy to się dzieje? Jeśli tak, jak mogę go zmusić, aby tego nie robił?
Co należy umieścić w miejscu "..." w rzeczywistym kodzie jest najbardziej istotną częścią. Czy mógłbyś pokazać, co jest w twoim prawdziwym kodzie? – dasblinkenlight
Just strings. Zaktualizowano. – Synesso
Varargs w Javie to po prostu cukier syntaktyczny. Kompilator zamienia 'Obiekt ...' na 'Obiekt []'. Więc tak, są one równoważne. –