Matt it depends on the type, if its a primitive it returns a copy, if its an
Object it returns a reference, this is true for both ColdFusion and Java.

In coldfusion a struct is returned by reference, but a string or number
would be returned by value.

Try it and See! :)

Although that's still not what I was intending to show with my example, I
was intending to show that using variables is not private, and shouldn't be
considered private until the bug is fixed.

import java.util.*;

public class Tester {

    private HashMap map = new HashMap();
    private int salary = 0;
    public Tester() {
        map.put("1", "2");
    }

    public HashMap getMap() {
        return map;
    }

    public int getSalary()
    {
        return salary;
    }

    public static void main(String args[])
    {
        Tester t = new Tester();
        HashMap h1 = t.getMap();
        h1.put("2", "3");
        HashMap h2 = t.getMap();
          //should output 3 if getter returned a reference
        System.out.println(h2.get("2"));
        int s = t.getSalary();
        s = 100;
          //should output 100 if getter returned a reference
        System.out.println(t.getSalary());
    }
}



-pete

-----Original Message-----
From: Matt Liotta [mailto:[EMAIL PROTECTED]]
Sent: Monday, September 02, 2002 7:05 PM
To: CF-Talk
Subject: RE: CFC theory


I don't know how more explicit I can get. Your getX method is returning
a reference to a private data member. Once you have a reference there is
nothing stopping you from changing the private data. Again, this is the
same as in Java.

public class Salary
{
        private int salary = 100;

        public int getSalary()
        {
                return salary;
        }
}

Try it and see!

Matt Liotta
President & CEO
Montara Software, Inc.
http://www.montarasoftware.com/
V: 415-577-8070
F: 415-341-8906
P: [EMAIL PROTECTED]

> -----Original Message-----
> From: Pete Freitag [mailto:[EMAIL PROTECTED]]
> Sent: Monday, September 02, 2002 4:05 PM
> To: CF-Talk
> Subject: RE: CFC theory
>
> I don't think you saw what I was getting at, here is a very explicit
> example:
>
> <cfset foo = CreateObject("component", "Salary")>
> <cfset variables.salary = "123">
> <cfoutput>#foo.getSalary()#</cfoutput>
>
> getSalary will return 123
>
> here is an even worse example:
>
> foo.cfc:
> <cfcomponent>
>       <cfset variables.x = "100">
>       <cffunction name="getX">
>               <cfreturn variables.x>
>       </cffunction>
>       <cffunction name="setX">
>               <cfargument name="x">
>               <cfset variables.x = arguments.x>
>       </cffunction>
> </cfcomponent>
>
> test.cfm:
> <cfset foo1 = CreateObject("component", "foo")>
> <cfset foo2 = CreateObject("component", "foo")>
> <cfset foo1.setX(1)>
> <cfset foo2.setX(2)>
> <cfoutput>#foo1.getX()#</cfoutput>
>
> take a wild guess what this outputs... 2!
>
> not my idea of private.
>
> -pete
>
>
> -----Original Message-----
> From: Matt Liotta [mailto:[EMAIL PROTECTED]]
> Sent: Monday, September 02, 2002 6:38 PM
> To: CF-Talk
> Subject: RE: CFC theory
>
>
> The variable is private. However, when you use the getSalary method
you
> return a reference to the private variable. This is the same in Java
if
> you declare a variable as private and have a public "getter" that
> returns a reference to it.
>
> Matt Liotta
> President & CEO
> Montara Software, Inc.
> http://www.montarasoftware.com/
> V: 415-577-8070
> F: 415-341-8906
> P: [EMAIL PROTECTED]
>
> > -----Original Message-----
> > From: Pete Freitag [mailto:[EMAIL PROTECTED]]
> > Sent: Monday, September 02, 2002 3:40 PM
> > To: CF-Talk
> > Subject: RE: CFC theory
> >
> > > Anything placed in the variables scope is private; bug or not.
> >
> > Depends on how you look at it, sure it's private in that you can't
> access
> > cfcInstance.salary
> >
> > But you could do something like this...
> >
> > <cfset variables.salary = foo.getSalary()>
> > <cfset variables.salary = DollarFormat(variables.salary)>
> > <cfoutput>#variables.salary#</cfoutput>
> >
> > and you will change the value of the data member inside the CFC. I
> don't
> > see
> > how you can call that behavior private, because it goes against all
> the
> > reasons you would want to have private access.
> >
> > Though I agree with you if you are saying that as long as the
> developer
> > using your CFC is aware of the bug, then you can pretend that
> variables
> > scope is private, and just avoid writing code like the code above.
> >
> >
> >
>
>

______________________________________________________________________
Get the mailserver that powers this list at http://www.coolfusion.com
FAQ: http://www.thenetprofits.co.uk/coldfusion/faq
Archives: http://www.mail-archive.com/[email protected]/
Unsubscribe: http://www.houseoffusion.com/index.cfm?sidebar=lists

Reply via email to