变量表现得像指针一样

时间:2014-01-07 00:01:39

标签: java android

在Java中,我有两个类,每个类从Singleton类中获取值,但它似乎在更改Singleton中的值,我只想要一个本地副本。这是我班上发生的缩短版本。

method.getName()应返回“Abbey”,就像之前创建的那样

public class MethodFragment1 extends Fragment {

    private Method method = MethodLab.get(getActivity()).getMethod();

    method.setName("Test");
}

public class MethodFragment2 extends Fragment {

    private Method method = MethodLab.get(getActivity()).getMethod();

    System.out.println(method.getName());
}

输出为“测试”

这两个课程都没有从MethodSingleton获得MethodLab的本地副本,如果不是,我如何获得本地副本?

1 个答案:

答案 0 :(得分:1)

因为它是单例 - 它为所有调用者返回相同的对象。这是单例模式的全部要点 - 所有调用者都获得相同的实例。如果您想为每个调用者设置单独的实例 - 只需在每次有人调用getMethod()时创建新实例:

Method getMethod()
{
     return new Method();
}

基本上,目前尚不清楚你要做什么。或者你可以在每次有人打电话MethodLab.get()时返回“提供方法的东西”的单独实例。很难说没有看到你的班级结构

修改: 如果要向调用者提供对象的副本,可以克隆MethodProvider(不知道MethodLab.get()返回的内容:))。请注意,您需要在完成后推回更改:

public class MethodLab
{
    private static MethodProvider provider = null;
    public static MethodProvider get()
    {
        //Not thread safe...
        if(provider == null)
        {
             provider = new MethodProvider();
             provider.getMethod().setName("Abby");
        }
        return provider.clone();
    } 

    public static set(MethodProvider newProvider)
    {
        provider = newProvider;
    }
}