Proably would use a set of case classes I guess, but would end up looking like a pretty version of that (someone like Viktor will probably show us !).
On Aug 18, 9:11 pm, Peter Becker <peter.becker...@gmail.com> wrote: > Reinier Zwitserloot wrote: > > Yes, an utopia with checked exceptions is probably pretty decent, but > > as a practical matter they've been horribly abused. Not just by third > > party libraries; the java core library is inconsistent in places and > > has a lot of missing throws clauses in interfaces that can't be fixed > > because it would break backwards compatibility. Trying to fix these > > things is going to be even more painful than having to deal with > > checked exceptions in the current circumstance, which is one of the > > reasons why I advocate solving the problem directly. Such as offering > > an opt out mechanism where a programmer can explicitly 'correct' the > > compiler to say: Yah, I know, I know, this method call here DECLARES > > that it'll throw SomeCheckedException, and I neither catch it nor > > declare to throw it onwards, but, shaddap. I know what I'm doing, just > > compile this code, and let me get on with my day. > > > It'll be abused, but the notion that exceptions will be abused in some > > fashion is what we have to deal with. The question is: How can we make > > sure the abuse is kept to a minimum? I'd assert that try {} catch > > ( Throwable t ) { Log.log(t); } is a much worse abuse than > > sneakythrowing. > > Agreed. > > You get the benefit of being explicitly told about the checked > > exceptions that you ought to be checking, but when the theory fails > > due to a practical matter (the declared exception can't possibly > > happen, or you want to throw the exception onward but due to a badly > > designed interface you're not allowed to, etc, etc), you won't have to > > jump through a bunch of hoops, obscuring the exception as you go. > > > Being able to return a disjoint type so you can cover extraordinary > > exit conditions that way instead of throwing exceptions for them could > > work, but I don't really know of any language that handles them all > > that well. The only way I can see how it could possibly work is > > pattern matching. Which scala can mostly do, can't it? > > As far as I understand you can't just do something like this (in > Java-like syntax, but ignoring a few other things Java such as the > .class for types): > > public Result|Error1|Error2 someMethod() {...} > > public void someOtherMethod() { > var result = someMethod(); > switch(typeof result) { > case Result: > processResult(result); > default: > handleError(result); > } > > } > > public void processResult(Result result) {...} > > public void handleError(Error1|Error2 error) { > ...code using anything on common supertypes of Error1/2... > > } > > Part of what I'd like to see is that there is no need to name the types > used. The signature of the last method should also be allowed to be > handleError(Error) assuming that both Error1 nad Error2 are subtypes of > Error (which is really just normal polymorphism since it implies that > the union is a subtype, too). > > My Scala is not good enough to judge what is truly possible, but most > code I've seen seems to end up using Either in this case, which seems a > bit of a kludge -- particularly if you create a union of more than two > types. I'd be happy to hear about alternatives. > > Peter > > > > > On Aug 18, 12:13 pm, Peter Becker <peter.becker...@gmail.com> wrote: > > >> I still believe that the main reason people hate checked exceptions is > >> that they have been used badly. > > >> But I don't really like them either, I just dislike runtime exceptions > >> more ;-) The reason for that is that they hide things I might want to > >> know about when using an API. No one reads documentation well enough, > >> the enforcement checked exceptions give you is quite useful -- at least > >> given the context of Java. And I don't buy into the "just unit test" > >> argument, things like SQLException and IOException rarely happen in test > >> environments unless the test was designed to test just that -- it is the > >> exceptional case you don't expect that scares me. > > >> What I would really like to see is a meet/or/disjunction/union operator > >> in the type system, with a case-like construct to resolve the resulting > >> types. Scala has two things that are halfway there (Either, case > >> classes), but neither is the full monty. > > >> Peter > > >> phil swenson wrote: > > >>> there is a reason no other language ever written has checked > >>> exceptions - checked exceptions are a bad idea. > > >>> On my first java project back in 1999 I remember adding in a checked > >>> exception to a utility class. It has effects on hundreds of classes > >>> and 1000s of method calls. I then decided it was more trouble than it > >>> was worth and switched everything to runtime exceptions. Worked > >>> brilliantly. > > >>> Checked exceptions almost always degenerate into "throws exception" on > >>> 100s to 1000s of methods in your project. They simply don't scale, > >>> one small change can ripple through an entire project. They also lead > >>> to try{blahblah}catch(Exception e}{} (exception hiding). They lead to > >>> logging the exception multiple times (catch, log, rethrow), giant > >>> method signatures, exception wrapping, and other harmful practices. > > >>> The correct (IMO) way to handle it is to let the exception bubble up > >>> to the top level thread and handle it there, whether it's present to > >>> the user, log, and/or cancel a transaction. Exceptions almost never > >>> can be recovered from and people are almost always fooling themselves > >>> if they think they can. I think 95+% of the time exceptions are from > >>> bugs, not from recoverable situations. People try to build hugely > >>> fault tolerant systems and they end up hiding bugs. > > >>> In the rare case that you want to handle an exception at a lower > >>> level, do it. But you certainly don't want this to be the default > >>> behavior, it's the EXCEPTIONAL case. :) > > >>> On Aug 17, 9:10 pm, Michael Neale <michael.ne...@gmail.com> wrote: > > >>>> What do people think of the scala approach of no checked exceptions - > >>>> even checked exceptions are not treated specially by the constructor > >>>> (personally, I like it). > > >>>> On Aug 18, 12:55 pm, Christian Catchpole <christ...@catchpole.net> > >>>> wrote: > > >>>>> No, i just let that go up. I really try to avoid the declare as null > >>>>> then set thingy. > > >>>>> On Aug 18, 12:03 pm, Casper Bang <casper.b...@gmail.com> wrote: > > >>>>>> You neglect to handle the checked exception declared by > >>>>>> prepareStatement no? > > >>>>>> PreparedStatement stmt = null; > >>>>>> try{ > >>>>>> stmt = connection.prepareStatement(sql); > >>>>>> final ResultSet rs = stmt.executeQuery(); > >>>>>> try{ > >>>>>> while (rs.next()){ > >>>>>> // Stuff... > >>>>>> { > >>>>>> } > >>>>>> finally{ > >>>>>> rs.close(); > >>>>>> }} > > >>>>>> catch(SQLException e){ > >>>>>> // Logging...} > > >>>>>> finally{ > >>>>>> try{ > >>>>>> stmt.close(); > >>>>>> } > >>>>>> catch(SQLException whoTheFuckCares){ > >>>>>> }; > > >>>>>> } > > >>>>>> Really, how many other ways are there to do it I wonder now? (Apart > >>>>>> from wrapping certain things, like the last try-catch clause in some > >>>>>> general purpose "closer util"?). > > >>>>>> /Casper --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "The Java Posse" group. To post to this group, send email to javaposse@googlegroups.com To unsubscribe from this group, send email to javaposse+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/javaposse?hl=en -~----------~----~----~----~------~----~------~--~---