Thanks to everyone's comments, especially Joe's and Larry's, I now understand the error of my ways. What makes this code different from the other code I'm used to working with in OpenJUMP is that this code is part of a library. In this case I'm trying to handle the exception within the library. This is not appropriate. I need to throw this exception from the method and let the caller of the libraries API decide how to handle the exception.
It seems, as a general rule, that library should delegate exception handling to client code in most cases. I will modify the JTSWarped code to reflect this. Part of my confusion was the result of my believing that the catch statement halted execution of the program, which I realize now it does not. Thanks for all of the help. I know I'm only a hobby programmer, but I'm always surprised at how much I have to learn about the one porgamming language I use the most. The Sunburned Surveyor On Jan 30, 2008 8:22 AM, Larry Becker <[EMAIL PROTECTED]> wrote: > Hi Landon, > > Unless I'm misunderstanding, the behavior of the compiler seems normal to me. > > >However, if I remove the return null statement from the end of this > >method, Eclipse gives me a compile error. This error states that the > >getSupplementaryAngle method must return a SurveyorsAngle value. > > The catch statement has "caught" the exception, so execution proceeds > to the next statement after the catch block. This problem only occurs > if you don't use the catch block to throw a exception to the caller. > In other words, if it is proper and necessary to throw the exception > in AngleCruncher.subtractAngles(), then it is probably a bad idea to > simply eat the exception here and just log it to the err console. > > My recommendation would be to have the function throw the exception by > declaring it as getSupplementaryAngle(..) throws ShouldNeverReachHere > {... Then you can remove the try catch blocks and just code > normally. > > regards, > > Larry > > > > On Jan 29, 2008 4:58 PM, Sunburned Surveyor > > <[EMAIL PROTECTED]> wrote: > > Thank you for the comments Martin and Stefan. I may try posting this > > question on a Java programming forum, but I always like to check here > > first. > > > > Martin: I do not know if this error is unique to the Eclipse Compiler. > > I haven't compiled it from the command line, so I don't know if this > > is an Eclipse problem. I'll try the same code in Netbeans to see if I > > get the same error. > > > > Stefan, > > > > I need to think some more about what you said. > > > > Landon > > > > > > On Jan 29, 2008 1:30 PM, Stefan Steiniger <[EMAIL PROTECTED]> wrote: > > > > > > > > > Sunburned Surveyor schrieb: > > > > If I undertstand your suggestion correctly, then the technique you > > > > suggest doesn't work, at least not with the Eclipse compiler. If you > > > > declare the variable being returned before the try/catch statements, > > > > but set the value within the try statement, the Eclipse compiler > > > > complains that you could be returning a value that may not be > > > > initialized. This means you end up setting the variable you want to > > > > return to null before the try statement, > > > > > > yes > > > > > > instead of setting it to null > > > > after. Either way, the null value will not be returned, and it doesn't > > > > matter whether it is set before or after. In essence, the same problem > > > > exists. > > > > > > the null value will be returned, since all arguments after the block > > > should be executed. > > > > > > (but may be remember something wrong) > > > > > > > > > > > Perhaps using your technique makes more sense for someone reading the > > > > code, in which case I should adopt it. Still, it would be nice if the > > > > Java compiler could recognize that only one of two execution paths are > > > > possible with this method. In the first the try statement properly > > > > intializes the return value and returns it to the caller, or the catch > > > > statement throws the exception. In no execution scenario does a null > > > > value need to be returned. > > > > > > oh.. but what if you want the application should still be continued and > > > no message thrown: e.g. If you expect a returned value to be an > > > int/double you can set the variable to: "-1" later in in the calling > > > function you know when the returned value is "-1" you do some specific > > > actions (i.e. derive the expected value with a work around function). > > > > > > > > > > > > > > Its almost like the compiler is failing to recognize the exception, > > > > and still expects the method to return a value when the exception will > > > > be thrown because of error conditions. > > > > > > > > Maybe I'm missing an obvious part of the picture. > > > > > > > > The Sunburned Surveyor > > > > > > > > On Jan 29, 2008 12:28 PM, Stefan Steiniger <[EMAIL PROTECTED]> wrote: > > > >> mhm.. I don't realy get why you put the first return into the try case? > > > >> why should one return within a function and not at the end of a method? > > > >> (i.e. i have never seen this in java code) > > > >> > > > >> instead declear a new method variable and set their value within try{} > > > >> and/or catch{} and return this variable at the end. > > > >> > > > >> stefan > > > >> > > > >> Sunburned Surveyor schrieb: > > > >> > > > >>> I've got a quick question about the best way to handle return values > > > >>> in Java methods with a try/catch statement. Consider, as an example, > > > >>> the following method: > > > >>> > > > >>> public static SurveyorsAngle getSupplementaryAngle(SurveyorsAngle > > > >>> argAngle) > > > >>> { > > > >>> try > > > >>> { > > > >>> SurveyorsAngle halfRevolution = new BasicSurveyorsAngle(0.50); > > > >>> SurveyorsAngle toReturn = > > > >>> AngleCruncher.subtractAngles(halfRevolution, argAngle); > > > >>> return toReturn; > > > >>> } > > > >>> > > > >>> catch(ShouldNeverReachHere caught) > > > >>> { > > > >>> System.err.println(caught.getMessage()); > > > >>> } > > > >>> > > > >>> return null; > > > >>> } > > > >>> > > > >>> In this example the return value must be set within the try statement, > > > >>> becuase the subtractAngles method throws an exception. > > > >>> > > > >>> This means that the method has to return a null value after the > > > >>> try/catch statements. However, this return statement will never be > > > >>> reached, because the method will either [1] return from the try > > > >>> statement with a valid SurveyorsAngle object or [2] execution will > > > >>> shift to the catch statement. > > > >>> > > > >>> However, if I remove the return null statement from the end of this > > > >>> method, Eclipse gives me a compile error. This error states that the > > > >>> getSupplementaryAngle method must return a SurveyorsAngle value. > > > >>> > > > >>> I seem to run into this a lot in my code. I know I could just > > > >>> eiliminate the try/catch statement and add a throws clause to the > > > >>> containing method, but sometimes the exception SHOULD be handled in > > > >>> the containing method. > > > >>> > > > >>> Is there a better solution? It seems like the compiler is requiring a > > > >>> return statement that can never be reached. > > > >>> > > > >>> Thanks for any advice on this. > > > >>> > > > >>> The Sunburned Surveyor > > > >>> > > > >>> ------------------------------------------------------------------------- > > > >>> This SF.net email is sponsored by: Microsoft > > > >>> Defy all challenges. Microsoft(R) Visual Studio 2008. > > > >>> http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ > > > >>> _______________________________________________ > > > >>> Jump-pilot-devel mailing list > > > >>> Jump-pilot-devel@lists.sourceforge.net > > > >>> https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel > > > >>> > > > >>> > > > >> ------------------------------------------------------------------------- > > > >> This SF.net email is sponsored by: Microsoft > > > >> Defy all challenges. Microsoft(R) Visual Studio 2008. > > > >> http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ > > > >> _______________________________________________ > > > >> Jump-pilot-devel mailing list > > > >> Jump-pilot-devel@lists.sourceforge.net > > > >> https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel > > > >> > > > > > > > > ------------------------------------------------------------------------- > > > > This SF.net email is sponsored by: Microsoft > > > > Defy all challenges. Microsoft(R) Visual Studio 2008. > > > > http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ > > > > _______________________________________________ > > > > Jump-pilot-devel mailing list > > > > Jump-pilot-devel@lists.sourceforge.net > > > > https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel > > > > > > > > > > > > > > ------------------------------------------------------------------------- > > > This SF.net email is sponsored by: Microsoft > > > Defy all challenges. Microsoft(R) Visual Studio 2008. > > > http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ > > > _______________________________________________ > > > Jump-pilot-devel mailing list > > > Jump-pilot-devel@lists.sourceforge.net > > > https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel > > > > > > > ------------------------------------------------------------------------- > > This SF.net email is sponsored by: Microsoft > > Defy all challenges. Microsoft(R) Visual Studio 2008. > > http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ > > _______________________________________________ > > Jump-pilot-devel mailing list > > Jump-pilot-devel@lists.sourceforge.net > > https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel > > > > > > -- > http://amusingprogrammer.blogspot.com/ > > > ------------------------------------------------------------------------- > This SF.net email is sponsored by: Microsoft > Defy all challenges. Microsoft(R) Visual Studio 2008. > http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ > _______________________________________________ > Jump-pilot-devel mailing list > Jump-pilot-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel > ------------------------------------------------------------------------- This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2008. http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ _______________________________________________ Jump-pilot-devel mailing list Jump-pilot-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel