問題不清楚,但我想知道你是否發明了「依賴注入」?
難題的第一部分是,一個方法可以通過將它們包裝在一個對象中來返回多個值。
public class ValuePair {
public int a;
public int b;
}
public ValuePair takeInput(){
ValuePair pair = new ValuePair();
println("Enter a number: (a) and (b)\n");
pair.a = readInt("a:");
pair.b = readInt("b:");
return pair;
}
有了這樣你可以做:
ValuePair p = takeInput();
System.out.println("Hypotenuse is " + calculateHypotenuse(p.a, p.b) + "\n";
(需要注意的是公共領域通常不被認爲是良好的作風 - 我使用他們在這裏,因爲代碼更短在實際代碼中使用getter和setter方法。 )。
這可能是所有你需要的答案。但你問:
有沒有一種方法,我可以將這些方法傳遞給另一種方法?
嗯,是的,你可以,如果你把這種方法包裝在專門的目的類中。由於我希望會變得明顯的原因,我們將首先定義一個接口。
public interface ValuePairSource {
public ValuePair getPair();
}
...和一個類實現它:
public class UserInputValuePairSource implements ValuePairSource {
@Override
public ValuePair getPair() {
ValuePair pair = new ValuePair();
println("Enter a number: (a) and (b)\n");
pair.a = readInt("a:");
pair.b = readInt("b:");
return pair;
}
}
現在,你可以創建一個可以告訴從哪裏得到它的值畢達哥拉斯類。
public class Pythagoras {
private ValuePairSource valuePairSource;
public Pythagoras(ValuePairSource source) {
this.valuePairSource = source;
}
public double hypotenuse() {
ValuePair pair = valuePairSource.getPair();
return Math.sqrt(pair.a^2 + pair.b^2)
}
}
在構造函數中,我們告訴每個我們創建的Pythagoras對象,如何獲得一對值。所以我們可以這樣使用它:
Pythagoras p = new Pythagoras(new UserInputValuePairSource());
double hypotenuse = p.hypotenuse();
這是什麼用途?那麼,這意味着我們可以發明其他種類的ValuePairSource。例如,一個ShapeValuePairSource,它從我們設置的Shape對象中獲取值。
(這是假設類問題的目的)
所以,你可能會使用這樣的:
Triangle t = canvas.getLastTriangle(); // or whatever
ValuePairSource vps = new ShapeValuePairSource(triangle);
Pythagoras p = new Pythagoras(vps);
double hypotenuse = p.hypotenuse();
因此,沒有在所有的改變畢達哥拉斯類,我們現在把它讀來自形狀對象的值,而不是用戶輸入。
好吧,這是一個有點人爲的例子,但它確實回答了「我可以將這些方法傳遞給另一種方法」的問題 - 這是Spring之類的基礎。
請注意,某些語言允許您直接將方法傳遞給其他方法,而無需像在此處那樣將它們包裝到類中。這被稱爲「函數式編程」,通常這些「方法」被稱爲「函數」。
您在第一段和第二段中所陳述的內容有點混淆。那麼,你想要將'變量'的值從一種方法傳遞給另一種方法? – Sujay
這不是真正的OOP方式。你應該創建一個對象來保存任何需要的信息並傳遞它。 – navlelo
@Sujay,這是正確 –