Как использовать логический метод из одного класса в другом для проверки строкового параметра? - PullRequest
0 голосов
/ 08 октября 2019

Я работаю над java-заданием для школы, оно касается системы телефонных телефонных карточек, где существуют различные классы для каждого типа телефонных карточек, я застрял в той части, где я использую предоставленный класс CallZone, чтобы проверить,Зона, указанная в параметре, является действительной, я не уверен, как вызвать ее метод isValidZone в классе телефонной карты, например, в классе SuperNA10Card.

Я не уверен, является ли это правильным способом использования класса CallZone длячтобы проверить, является ли зона параметрирования vaild.

if(zone.equals("canada")){return true;} 
or
if(CallZone.isValidZone(zone) == true){return true}

вот класс CallZone:

public final class CallZone {

     public static boolean isValidZone(String zone) {
         zone = zone.toLowerCase();
         return (zone.equals("canada") ||
             zone.equals("usa") ||
             zone.equals("europe") ||
             zone.equals("asia") ||
             zone.equals("anz") ||
             zone.equals("latinam") ||
             zone.equals("africa")
         );
     }
}

и вот один из классов Phonecard, класс SuperNA10, использующий его для проверкизона действительна:

public class SuperNA10 extends PhoneCard{
    final double canMinRate = 0.05;
    final double usMinRate = 0.10;
    final double weeklyMainFee = 0.50;

    public SuperNA10(long no, int passwd){
      super(no, passwd,10.00) //invokes superclass class constructor sets no, passwd and balance to 10.00
    }

    public boolean allowed(String zone){
     if(CallZone.isValidZone(zone) ){
        return true;
      }else{
       return false;
     }


    }

}

Я не уверен, как заставить класс CallZone проверить, является ли допустимым параметр в методе класса SuperNA10, также извините, если мой вопрос не ясен или вызывает путаницуЭто мой первый пост.

1 Ответ

0 голосов
/ 08 октября 2019

Поскольку у вас есть определенное количество зон вызова, вы можете использовать enum, например:

public enum CallZone {

    CANADA, USA, EUROPE; //add any number of zones here

    public static boolean isValid(String zone) {
        return Stream.of(values())
                .anyMatch(s -> s.toString().equalsIgnoreCase(zone));
    }
}

Вы также можете посмотреть на использование CallZone.valueOf(zone) вместе с перехватом IllegalArgumentException вместоиспользуя Stream как указано выше. Но я предпочитаю не использовать исключения для неисключительных сценариев.

А затем в вашем SuperNA10 классе вы можете использовать его следующим образом:

public boolean allowed(String zone) {
    return CallZone.isValid(zone);
}
...