簡體   English   中英

如何從java中的兩個不同類調用相同的方法

[英]How to call same method from two different classes in java

我有兩個類AppleOrange這樣:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM