2012-07-03 11 views
7

Mam statyczną metodę, która zwraca ciąg, ale w przypadku, gdy ciąg znaków, który jest przekazywany nie pasuje do jednego z kilku słów, chcę rzucić wyjątek. Poniższy kod jest tylko próbką tego, co próbuję zrobić, ale wciąż pojawia się komunikat "niestatyczna zmienna, której nie można odwoływać się ze statycznego kontekstu" w wierszu, w którym wyrzucam wyjątek. Zasadniczo, wartość zwracana przez getMsg musi być poprawna, lub program nie może kontynuować, więc potrzebuję sposobu, aby to złapać.Czy metody statyczne, które zwracają wartość, rzucają wyjątek?

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

Nie skompiluje się. – user1154644

+2

ten kod jest niezgodny z komunikatem o błędzie, który publikujesz. Musisz opublikować sam komunikat o błędzie i poinformować nas, który wiersz go powoduje. –

Odpowiedz

5

Problem jest spowodowany tym, że UnknownInputException jest prawdopodobnie klasą zagnieżdżoną, a jeśli utworzysz instancję z operatorem new, jako klasą zagnieżdżoną, powinna mieć dostęp do obiektu "nadrzędnego" - który nie istnieje od momentu utworzenia klasy w kontekście statycznym. Aby uzyskać więcej informacji na ten temat, zobacz Static method returning inner class.

Możliwym rozwiązaniem byłoby zadeklarować UnknownInputException jak static tak:

private static class UnknownInputException extends Exception { ... } 

Oczywiście, nie będzie w stanie uzyskać dostęp do dowolnej instancji (non-static) metody i/lub pola z tej klasy , ale to może nie być problem w twoim przypadku (szczególnie w przypadku klasy Wyjątek).

Również, return, wartość po linii throw jest niepotrzebna, ponieważ wykonanie nigdy nie osiągnie tej linii.

2

zmiennej tym nie zauważyć w podanym przykładzie kodu, więc nie może spowodować wystąpienie błędu.

Kod return "unknownInput"; jest nadmiarowy, ponieważ nigdy nie został wykonany.

Musi być inna statyczna metoda, w której używany jest this, który powoduje błąd.

+0

Widzę twój punkt na temat wartości zwracanej, ale nie metoda, która zwraca ciąg musi zwrócić wartość? – user1154644

+0

Nie, jeśli zgłasza wyjątek lub błąd. –

+0

Ok. Nigdzie w mojej metodzie nie używam słowa "to", więc nie wiem, dlaczego otrzymuję ten błąd kompilacji. – user1154644

0

Jest to całkowicie legalne w języku java do zgłaszania wyjątków od metod statycznych. Jednak kod, który tu przedstawiłeś, nie może być nawet skompilowany :) Podaj cały kod.

Pojawiający się błąd mówi tylko, że używasz nie statycznych pól danych zdefiniowanych w klasie z metody statycznej. Metoda statyczna nie należy do żadnej instancji, ale pole danych nie ...

0

Po pierwsze, linia return "unknownInput"; nigdy nie zostanie wykonana. Czy nie pokazuje tam ostrzeżenia o martwym kodzie?

Twoja metoda nie ma żadnego "tego" odniesienia, czy na pewno narzeka na tę metodę?

2

Wyjątek UnknownInputException jest wewnętrzną klasą. Kiedy zrobiłem to statycznie, kod skompilował się dobrze. Dzięki za pomoc.

+1

Nie jest normalną praktyką tworzenie wewnętrznych klas wyjątków w Javie. Rzeczywiście, nie mogę sobie przypomnieć, widząc dobrze znany API, który to robi. Zastanów się nad stworzeniem klasy na najwyższym poziomie. –

Powiązane problemy