调试Oracle Java教程 - 从内部类访问的局部变量;需要宣布最终

时间:2013-03-24 22:39:06

标签: java

如果我尝试编译这段代码,我会收到一条错误,上面写着“本地变量phoneNumber1是从内部类中访问的;需要声明为final。

很简单我如何解决这个问题,因为它没有这个编译错误?我已经阅读了它的技术规范,我已经完成了教程,但我仍然不知所措。我希望没有人付钱写这件事。

public class LocalClassExample {

    static String regularExpression = "[^0-9]";

    public static void validatePhoneNumber(String phoneNumber1, String phoneNumber2) {

       int numberLength = 10;

       class PhoneNumber {

            String formattedPhoneNumber = null;

            PhoneNumber(String phoneNumber){
                // numberLength = 7;
                String currentNumber = phoneNumber.replaceAll(
                  regularExpression, "");
                if (currentNumber.length() == numberLength)
                    formattedPhoneNumber = currentNumber;
                else
                    formattedPhoneNumber = null;
            }

            public String getNumber() {
                return formattedPhoneNumber;
            }

            public void printOriginalNumbers() {
                System.out.println("Original nubmers are " + phoneNumber1 +
                    " and " + phoneNumber2);
            }
        }

        PhoneNumber myNumber1 = new PhoneNumber(phoneNumber1);
        PhoneNumber myNumber2 = new PhoneNumber(phoneNumber2);

        myNumber1.printOriginalNumbers();

        if (myNumber1.getNumber() == null)
            System.out.println("First number is invalid");
        else
            System.out.println("First number is " + myNumber1.getNumber());
        if (myNumber2.getNumber() == null)
            System.out.println("Second number is invalid");
        else
            System.out.println("Second number is " + myNumber2.getNumber());

    }

    public static void main(String... args) {
        validatePhoneNumber("123-456-7890", "456-7890");
    }
}

1 个答案:

答案 0 :(得分:1)

解决这个问题的最简单方法是将变量声明为final:

...
public static void validatePhoneNumber(final String phoneNumber1, final String phoneNumber2) {
   final int numberLength = 10;
   ...
}
...