Return-Path: X-Original-To: apmail-cayenne-dev-archive@www.apache.org Delivered-To: apmail-cayenne-dev-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 071FAE499 for ; Sat, 9 Mar 2013 07:03:01 +0000 (UTC) Received: (qmail 38159 invoked by uid 500); 9 Mar 2013 07:03:00 -0000 Delivered-To: apmail-cayenne-dev-archive@cayenne.apache.org Received: (qmail 38008 invoked by uid 500); 9 Mar 2013 07:02:59 -0000 Mailing-List: contact dev-help@cayenne.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@cayenne.apache.org Delivered-To: mailing list dev@cayenne.apache.org Received: (qmail 37944 invoked by uid 99); 9 Mar 2013 07:02:56 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 09 Mar 2013 07:02:56 +0000 X-ASF-Spam-Status: No, hits=-0.7 required=5.0 tests=RCVD_IN_DNSWL_LOW,SPF_PASS X-Spam-Check-By: apache.org Received-SPF: pass (nike.apache.org: domain of grobmeier@gmail.com designates 74.125.82.42 as permitted sender) Received: from [74.125.82.42] (HELO mail-wg0-f42.google.com) (74.125.82.42) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 09 Mar 2013 07:02:51 +0000 Received: by mail-wg0-f42.google.com with SMTP id 12so427273wgh.3 for ; Fri, 08 Mar 2013 23:02:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-received:mime-version:in-reply-to:references:from:date:message-id :subject:to:content-type; bh=x3NLGEsDGshCh4YVI10K5gAI1Ou5EE0plJHMjWWHoo4=; b=eIiM6PrT22PIyGyZsxvY1EOdGWgXH2mZBIyxR5qCyesAFo+xAfKuI6/zduxQnueD0s JytBkiQtmZ85YPStOu88WBU6jvwLOeyKG+7TAXvbies2ekVTzzPxJ2Z5o0/xc2rjKvhU V8CIy9NFpwUvQTsGHXSTDJCGvqGTGmQi0pOr8Q8nTIS3CN2JXuhTuui35FekaIWYo1Pa gR0cXXF042cQh7cVK2Lu+eUogv/35LjbMfphX9Vcbw6Xl4u8Krz682x9ezJZMiUCTj9G ihHyUlRVSSM82MuOfhFzEcSv7Xwr6GBj9z4QuyR5oUfT6hpQPEK319plTQtAijf6FXiA YgJg== X-Received: by 10.180.103.65 with SMTP id fu1mr2404533wib.4.1362812550631; Fri, 08 Mar 2013 23:02:30 -0800 (PST) MIME-Version: 1.0 Received: by 10.194.47.74 with HTTP; Fri, 8 Mar 2013 23:02:10 -0800 (PST) In-Reply-To: References: From: Christian Grobmeier Date: Sat, 9 Mar 2013 08:02:10 +0100 Message-ID: Subject: Re: Cayenne.java To: dev@cayenne.apache.org Content-Type: text/plain; charset=UTF-8 X-Virus-Checked: Checked by ClamAV on apache.org On Fri, Mar 8, 2013 at 10:01 PM, Michael Gentry wrote: > Cool. Should I remove it in 3.1 and 3.2 both? > > BTW, I was curious how other utility packages worked and Apache Commons > doesn't do final, either: > > http://commons.apache.org/proper/commons-lang//apidocs/org/apache/commons/lang3/StringUtils.html When I remember correctly there was a discussion on Commons on final before ages and i think the outcome was final classes are usually not needed and should be avoided. Personally I think final is not so nice, because you can't know what people do. If there are not really good reasons for a final class, like extending String would probably mess up the string constant pool or so, I prefer to avoid it. If it is only there because of compiler optimization, I think modern compilers can optimize a static method only class without the final modifier - but I have no reference to prove it. Cheers Christian > Thanks, > > mrg > > > On Fri, Mar 8, 2013 at 2:50 PM, Andrus Adamchik wrote: > >> BTW, even though this won't be my coding style to extend o.a.c.Cayenne, I >> have nothing against removing "final" from it. >> >> >> On Mar 8, 2013, at 6:45 PM, Michael Gentry wrote: >> > Well, they "inherit" in the ability to call them. For example, if you >> had: >> > >> > public class CayenneUtil extends Cayenne >> > { >> > // Many more static utility methods here >> > } >> > >> > You could still then still call: >> > >> > CayenneUtil.intPKForObject(artist) >> > >> > This will call the "inherited" Cayenne.java method, plus you can call >> your >> > project-defined utilities with the same class. I see this as being more >> > user-friendly. I'm not talking about redefining the static methods, but >> > compositing new static methods in a subclass for simplification of >> calling >> > Cayenne-supplied utility methods and project-supplied utility methods. >> > >> > Thanks, >> > >> > mrg >> > >> > >> > On Fri, Mar 8, 2013 at 10:27 AM, Andrus Adamchik > >wrote: >> > >> >> Yeah. All its methods are static. There's no static inheritance in Java >> >> (unlike in say Objective C, you can't truly redefine a static method). >> So >> >> there's no instance behavior to inherit. In my mind this is a good >> reason >> >> to not ever want to subclass "Cayenne". >> >> >> >> Of course API style often comes down to personal preferences :) >> >> >> >> Andrus >> >> >> >> On Mar 8, 2013, at 4:22 PM, Michael Gentry >> wrote: >> >> >> >>> I was just looking at Cayenne.java introduced in 3.1 and noticed that >> it >> >> is >> >>> declared to be a final class. Is there any reason for this? I can >> quite >> >>> easily see people wanting to subclass it to add their own utility >> methods >> >>> which would make it easier for all those utilities to be grouped >> together >> >>> in one bigger class rather than spread out over several classes (from >> an >> >>> end-user's perspective of having to deal with different imports to >> access >> >>> the utilities -- obviously there would still be multiple classes, it >> >> would >> >>> just be better hidden). >> >>> >> >>> Thanks, >> >>> >> >>> mrg >> >> >> >> >> >> -- http://www.grobmeier.de https://www.timeandbill.de