Ich habe meinen Code dies vereinfacht:Refactoring durch generische Methode übergeben
static private String waitForString(String expected, int attempts) {
String actual = null;
for (int i = 0; i < attempts; i++){
actual = getString();
if (validateString(actual, expected)) {
return actual;
}
}
return null;
}
static private int waitForInt(int expected, int attempts) {
int actual = 0;
for (int i = 0; i < attempts; i++){
actual = getInt();
if (validateInt(actual, expected)) {
return actual;
}
}
return 0;
}
Da ich die gleiche Schleife bin mit (und da ich mehr als eine Klasse mit mehr als einem entsprechenden „Getter“ Verfahren und Validierungsmethode) Ich möchte es umgestalten. Ich versuchte dies:
static <T> T helperMethod(Method getMethod, Method validator,T expected, int attempts) {
T actual = null;
for (int i = 0; i < attempts; i++){
actual = method.invoke(null);
if (validator.invoke(null, actual, expected)) {
return actual;
}
}
return null;
}
Allerdings erhalte ich folgende Fehler:
actual = method.invoke(null);
error: incompatible types: Object cannot be converted to T
validator.invoke(null, actual, expected)
error: incompatible types: Object cannot be converted to boolean
ich nur in der Funktionsdeklaration angeben Methoden mit dem richtigen Rückgabetyp zu akzeptieren? Wenn das so ist, wie? Ideen für andere Wege zum Refactor werden geschätzt.
EDITED Um es klar zu machen, ich fragte nicht, wie der Rückgabetyp der Methode widerspiegeln. Danke dir VGR für die Lösung.
Mögliches Duplikat von [Wie finde ich den Rückgabetyp einer Methode in JAVA?] (Http://stackoverflow.com/questions/14730223/how-to-find-return-type-of-a-method-in -java) –
@DmytroGrynets Was bedeutet es mit der OP-Frage? –
Er konnte den Rückgabetyp der Methode innerhalb seiner Methode herausfinden und es überprüfen –