You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@xalan.apache.org by Chris McCabe <ch...@choicehotels.com> on 2003/03/08 00:09:32 UTC
Re: Using the final keyword was: cvs commit: xml-xalan/java/src/org/apache/xalan/xsltc/dom
DOMAdapter.java SAXImpl.java
Santiago Pericas-Geertsen wrote:
> Chris, I think all your points are valid from a software engineering
>standpoint. I also agree that the use of final does not buy much in terms of
>performance, but sometimes a minor improvement is welcome too (akin to not
>adding "virtual" if not needed in C++). Besides, I don't think it is hard to
>"definalize" things.
>
I disagree. It may be easy for you to "definalize" your own code, but
when someone else would like to use your code in their own work, they
get stung by the fact something is final and they can't do what they
want, and they end up creating their own copy of the code and
maintaining it just to get rid of the final keyword. Remember, your
code is not always going to be the "final" implementation, *especially*
if you do a good object oriented design.
I think if you are going to break the rules like this, you should do
an actual test (no assumptions), and document your results in the source
code with a statement of why you think this is good. This way someone
else looking at the code can see your reasons, and may decide at some
point that it is no longer justified. You might learn in the process
that your assumptions were wrong, and if nothing else it gives you some
confidence that you are making the right decision. If it comes down to
saving a couple of milliseconds during an operation that takes a minute
to execute, it becomes a lot harder to justify.
Other good examples of questionable performance enhancements include
object pools like String pools or memory pools.
>
>This is why String and the primitive objects
>such as Integer and Double are declared final. Otherwise you could
>simply subclass the object and do what you want, which would mean that
>you would have to make a copy of every String that you wanted to hold on
>
>
>to.
>
> I agree with your comments, except for the one above. What do you mean "do
>what you want"? Instance variables in those classes are private.
>
>
I think Joseph already answered this, but here is a concrete example:
public class MutableString extends String {
public MutableString(String value) { mutableValue = value; }
public String toString() { return mutableValue; }
public void setValue(String value) { mutableValue = value; }
private String mutableValue;
};
--
Chris P. McCabe - Principal Engineer
Choice Hotels International - Information Systems
chris_mccabe@choicehotels.com 602-953-4416
Re: Using the final keyword was: cvs commit: xml-xalan/java/src/org/apache/xalan/xsltc/dom DOMAdapter.java SAXImpl.java
Posted by Santiago Pericas-Geertsen <Sa...@sun.com>.
----- Original Message -----
From: "Chris McCabe" <ch...@choicehotels.com>
>
> Santiago Pericas-Geertsen wrote:
>
> > Chris, I think all your points are valid from a software engineering
> >standpoint. I also agree that the use of final does not buy much in terms
of
> >performance, but sometimes a minor improvement is welcome too (akin to
not
> >adding "virtual" if not needed in C++). Besides, I don't think it is hard
to
> >"definalize" things.
> >
> I disagree. It may be easy for you to "definalize" your own code,
Yes, I should have been more specific, I meant in my own code. I thought
the code that Morris was writing felt in that category.
-- Santiago