[英]How to call same method from two different classes in java
我有兩個類Apple和Orange這樣:
public final class Apple{
int getJuice();
}
public final class Orange{
int getJuice();
}
我無法改變它們 。 我有這樣的第三類fruitsManeger :
class FruitManeger {
Apple apple;
Orange orange;
enum Fruits{
Apple,Orange
}
Fruits favorFruits;
int getJoice(){
if(favorFruits==Fruits.Apple){
apple.getJuice();
}else if(favorFruits==Fruits.Orange){
orange.getJuice();
}
}
}
我的問題:在FruitManeger類中實現getJuice方法的最佳方法是什么?
你可以看到,如果我有很多水果,我應該添加很多if else expiration。
當然,我可以使用反射來按名稱調用方法,但是當getJuice方法返回一個對象而你想要做同樣的事情時,這不是一個好主意。
有沒有更好的方法?
有沒有更好的方法?
是的,將該應用程序重寫為更加明確的方式......
記住:你不能修改Apple或Orange,但OOP允許你擴展這些類,因為它們不是最終的...
class CorrectApple extends Apple implement IJuiceble{
@Override
int getJuice();
}
class CorrectOrange extends Orange implement IJuiceble{
@Override
int getJuice();
}
現在
interface IJuiceble{
int getJuice();
}
最后經理:
class FruitManeger {
private CorrectApple apple;
private CorrectOrange orange;
int getJoice(IJuiceble correctfruit){
return correctfruit.getJuice();
}
}
您可以使用switch而不是if / else。
class FruitManager {
Apple apple;
Orange orange;
enum Fruits {
Apple, Orange
}
Fruits favorFruits;
int getJoice() {
switch (favorFruits) {
case Apple:
apple.getJuice();
break;
case Orange:
orange.getJuice();
break;
default:
System.err.println("Fruit not found. " + favorFruits);
}
}
通過參考這個答案
interface IScalable {
void setScale(int scale);
int getScale();
}
class DataSizeAction extends EncoderAction implements IScalable {
...
}
class SomeoneElse {
private int scale = 2;
public void setScale(IScalable scalable) {
scalable.setScale(this.scale);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.