我簡化了我的代碼如下:重構通過傳遞泛型方法
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;
}
由於我使用的是同一迴路(因爲我有不止一個相應的「吸氣劑」的方法不止一個類和驗證方法)我想重構它。我嘗試這樣做:
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;
}
但是我得到以下錯誤:
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
我可以在函數聲明中指定只接受正確的返回類型的方法?如果是這樣,怎麼樣? 其他重構方式的想法將不勝感激。
EDITED 爲了說清楚,我沒有問如何反映該方法的返回類型。 謝謝你VGR的解決方案。
可能重複的[如何在JAVA中找到返回類型的方法?](http://stackoverflow.com/questions/14730223/how-to-find-return-type-of-a-method-in -java) –
@DmytroGrynets這與OP問題意味着什麼? –
他可以在他的方法中找到方法的返回類型並檢查它 –