[prev in list] [next in list] [prev in thread] [next in thread]
List: slide-dev
Subject: Re: Uri
From: Antoine Levy-Lambert <antoine () gmx ! de>
Date: 2007-02-20 12:51:56
Message-ID: D31AAA74-E20A-4AD3-BB01-3FFD6C511705 () gmx ! de
[Download RAW message or body]
Hello Bruno,
Thanks for your email.
On Feb 20, 2007, at 3:46 AM, Bruno DOREL wrote:
> High all
>
> A little sum up
>
> I made somme changes to Slide code to avoid Uri's leak of memory (I
> have used JProfiler to monitor the heap and see several Uri(s)
> staying in heap using SLIDE) I suggested to make a change in
> ExtendedKeystore to use the "Uri" instead of Object for the
> removeObjectFromCache(Uri key ) method
>
> Does anybody tried to compile with this new type of parameter (I
> compiled without error) ?
>
>
> Antoine Levy-Lambert suggested me that this modification doesn't
> change any thing because the toString method call is the good one
> in any case , ... that rigth ! but I think my code is better
> because it limit the type Object at compiler time and throw an
> Exception at run time if the key sent is not an Uri
>
>
> Nevertheless I propose to make a change to the Uri Class these
> change will appears as "cosmetic" but I propose it anyway
>
> In Uri class the method equals refer to the toString() method this
> is not correct from my point of vue I suggest :
>
> /**
> * Tests equivalence of two Uris.
> *
> * @param obj Object to test
> * @return boolean
> */
> public boolean equals(Object obj) {
> if ((obj != null) && (obj instanceof Uri)) {
> // return (uri.equals(obj.toString()));
> return uri.equals(((Uri)obj).uri);
> } else {
> return false;
> }
> }
>
I would not agree with this. Your suggestion would make an infinite
loop. Maybe we want : return uri.toString().equals(obj.toString()) ?
>
>
> I attach Uri class code as it is today in my project I comment the
> Uri instance counter (used in constructor , clone and finalyse )
> this simple code show the number of instances of Uri when SLIDE run
>
> Futhermore I made some changes in the class UriPath (not so
> "cosmetic")
>
> /**
> * Equals .
> * @param o Object to
> */
> public boolean equals(Object o) {
> boolean result = false;
> if ((o!= null) && (o instanceof UriPath)) {
> result = java.util.Arrays.equals(this.tokens,((UriPath)
> o).tokens); <-- my code
> /* UriPath other = (UriPath)o;
> if (other.tokens.length == this.tokens.length) {
> result = true;
> for (int i = 0; i < this.tokens.length; i++) {
> if (!other.tokens[i].equals(this.tokens[i])) {
> result = false;
> break;
> }
> }
> }*/
> }
> return result;
> }
>
> /**
> * hashcode use all tokens to compute hashcode
> */
> public int hashCode() {
> if (tokens.length > 0) {
> // return tokens[tokens.length - 1].hashCode();
> return this.toString().hashCode();
> }
> else {
> return 0;
> }
> }
>
>
> Method equals : I change the token arrays comparison made in the
> loop and I use the java.util.Arrays class (this is cosmetic)
>
> Method hashCode : as written today this method is not in accordance
> with equals method because only the length -1 token is used to
> compute the hash
The javadoc for Object.equals() says that it is good, but not
required, that hashCode() return a different values for objects for
which equals() return false.
The preferred method for submitting code changes is to create a bug
report, and attach the output of svn diff for changed classes, and to
tar new files in a separate attachment.
Best regards,
Antoine
> I suggest to use the toString().hashcode to use all tokens
>
> Bests regards
>
> B DOREL
>
>
> <Uri.java>
> <UriPath.java>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: slide-dev-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: slide-dev-help@jakarta.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: slide-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: slide-dev-help@jakarta.apache.org
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic