2012-07-03 39 views
7

Tôi có một phương thức tĩnh trả về một String, nhưng trong trường hợp chuỗi được truyền vào không khớp với một trong vài từ, tôi muốn ném một ngoại lệ. Đoạn mã dưới đây chỉ là một mẫu của những gì tôi đang cố gắng làm, nhưng tôi tiếp tục nhận được biến "không tĩnh này không thể được tham chiếu từ một bối cảnh tĩnh" trên dòng nơi tôi ném ngoại lệ. Về cơ bản, giá trị trả về từ getMsg phải hợp lệ, hoặc chương trình không thể tiếp tục, vì vậy tôi cần một cách để nắm bắt điều này.Phương pháp tĩnh có thể trả về một giá trị ném một ngoại lệ?

public static String getMsg(String input) throws UnknownInputException{ 
     if (input.equals("A")){ 
      return "key for A"; 
     } 
     throw new UnknownInputException("Some Message"); 
     return "unknownInput"; 
+2

Nó sẽ không biên dịch. – user1154644

+2

mã này không khớp với thông báo lỗi bạn đang đăng. Bạn cần phải đăng thông báo lỗi thực sự và cho chúng tôi biết dòng nào đang gây ra lỗi đó. –

Trả lời

5

Sự cố là do thực tế, UnknownInputException có thể là lớp lồng nhau và nếu bạn khởi tạo nó với toán tử new, dưới dạng lớp lồng nhau, nó sẽ có quyền truy cập vào đối tượng "cha mẹ" - tồn tại kể từ khi lớp được khởi tạo trong một ngữ cảnh tĩnh. Để biết thêm thông tin về điều này, hãy xem Static method returning inner class.

Một giải pháp có thể sẽ được tuyên bố UnknownInputException như static như thế này:

private static class UnknownInputException extends Exception { ... } 

Tất nhiên, bạn sẽ không thể truy cập vào bất kỳ trường hợp (không tĩnh) phương pháp và/hoặc các lĩnh vực từ lớp này , nhưng đó có thể không phải là một vấn đề trong trường hợp của bạn (đặc biệt là trong trường hợp của một lớp ngoại lệ).

Ngoài ra, return giá trị ing sau dòng throw là không cần thiết, vì thực thi sẽ không bao giờ đạt đến dòng đó.

2

Biến này không được ghi nhận trong các mã ví dụ đưa ra, vì vậy nó không thể gây ra lỗi.

return "unknownInput"; là dự phòng vì không bao giờ được thực thi.

Phải có phương pháp tĩnh khác trong đó this được sử dụng, gây ra lỗi.

+0

Tôi thấy điểm của bạn về giá trị trả về, nhưng không phải là một phương thức trả về một String phải trả về một giá trị ?? – user1154644

+0

Không nếu nó ném một ngoại lệ hoặc lỗi. –

+0

Ok. Không nơi nào trong phương pháp của tôi tôi đang sử dụng từ 'này', vì vậy tôi không biết tại sao tôi nhận được lỗi biên dịch đó. – user1154644

0

Hoàn toàn hợp pháp trong java để ném ngoại lệ từ các phương pháp tĩnh. Tuy nhiên mã bạn đã trình bày ở đây thậm chí không thể được biên dịch :) Vì vậy, hãy cung cấp tất cả mã.

Lỗi bạn nhận được ở đây chỉ nói rằng bạn đang sử dụng trường dữ liệu không tĩnh được xác định trên lớp từ phương pháp tĩnh. Phương pháp tĩnh không thuộc về bất kỳ cá thể nào, nhưng trường dữ liệu có ...

0

Thứ nhất, dòng return "unknownInput"; sẽ không bao giờ được thực hiện. Có phải nó không hiển thị cảnh báo mã chết không?

Và phương pháp của bạn không có bất kỳ tham chiếu 'này', bạn có chắc chắn rằng nó than phiền về phương pháp này không?

2

UnknownInputException là lớp bên trong. Một khi tôi đã làm cho nó tĩnh, mã được biên dịch tốt. Cảm ơn anh em về sự giúp đỡ.

+1

Thực hành không bình thường để tạo các lớp ngoại lệ bên trong trong Java. Thật vậy, tôi không thể nhớ lại khi thấy một API nổi tiếng thực hiện điều này. Cân nhắc biến nó trở thành một tầng lớp hàng đầu. –

Các vấn đề liên quan