【问题标题】:A list of objects in Java [duplicate]Java中的对象列表[重复]
【发布时间】:2010-12-10 00:47:30
【问题描述】:

我正在尝试制作一个包含不同对象的列表。

List<Object> list = new ArrayList<Object>();
    defObject defObj;
    optObject optObj;

而 defObject 只有一个字符串属性。

    public static class defObject
{
    public static String defObj;

    public defObject(String x)
    {
        setDefObj(x);           
    }

    public static String getDefObj() {
        return defObj;
    }

    public static void setDefObj(String defObj) {
        defObject.defObj = defObj;
    }           
}

如果我将多个 defObjects 添加到列表中,并在我完成添加元素后浏览列表,它们都包含相同的字符串,这是添加到列表中的最后一个 defObject。

我正在做这样的事情来将对象添加到列表中:

   if (whatever)
       list.add(defObj = new defObject("x"));
    else if(whatever)
       list.add(defObj = new defObject("y"));

结果是两个带有“y”字符串的defObjects

请帮我弄清楚为什么没有正确添加对象,并且属性都与添加到列表中的最后一个 defObj 相同。

【问题讨论】:

  • 类名应大写。

标签: java


【解决方案1】:

替换:

public static class defObject
{
    public static String defObj;
    ...

与:

public static class defObject
{
    public String defObj;
 ....

甚至更好:

public class DefObject {
    private String defObj;
    ....

使用关键字static 将使属性或方法成为class 方法,这意味着所有实例都只有一个。

从您的代码中删除它。还要注意在 Java 中,按照惯例,类名以大写开头,左大括号在同一行。

【讨论】:

  • 我会给你类名以大写开头,但 def 不左大括号应该在同一行——这是非常主观的。
  • 许多开发人员将左大括号放在自己的行上。
  • @non sequitor:是的,这是非常主观的,但事实证明,主要编程语言是 Java 的开发人员会这样做。在这种情况下,我宁愿阅读看起来像您所针对的 Java 的代码。我对 C# 做同样的事情,我在它自己的行中使用左大括号,因为这是大多数 C# 开发人员所做的。
【解决方案2】:

public static String defObj; 中删除static 并使其成为private 后,您还需要从方法签名中删除static,因为static 方法无法从静态上下文(即@987654326)访问实例变量@ 无法访问实例变量 defObj,因为编译器无法确保它已经存在 - 没有实例被实例化,因此没有实例变量。这只能在类加载时使用static 属性来完成。

【讨论】:

    【解决方案3】:

    问题是defObjstatic,所以所有实例都共享同一个变量。从课堂上的所有位置删除 static 一词,一切都会如您所愿。

    【讨论】:

      【解决方案4】:

      String defObj 变量是静态的,因此对于 defObject 的所有实例它总是相等的。在您的方法和属性声明之前删除“static”,它应该可以工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-09
        • 2013-12-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-09
        • 2014-12-26
        相关资源
        最近更新 更多