Java 清单的范围和有效期
我有一个产品类型的静态列表。当我从Shopowner类填充此列表时,它工作正常,但当我编译Customer.java时,列表返回空白集。为什么填充的列表不保留Java 清单的范围和有效期,java,list,generics,arraylist,Java,List,Generics,Arraylist,我有一个产品类型的静态列表。当我从Shopowner类填充此列表时,它工作正常,但当我编译Customer.java时,列表返回空白集。为什么填充的列表不保留 class Products { String name; int itemcode; Products(){} static List <Products> list = new ArrayList<Products>(); Products(String name,in
class Products {
String name;
int itemcode;
Products(){}
static List <Products> list = new ArrayList<Products>();
Products(String name,int itemcode)
{
this.name=name;
this.itemcode=itemcode;
}
public String toString()
{return (name+""+itemcode);}
}
class Shopowner {
public static void main (String ...at)
{
Products o = new Products("Shamppo",12);
Products.list.add(o);
Products o1 = new Products("choco",1112);
Products.list.add(o1);
System.out.println(Products.list); //prints fine
}
}
class Customer {
public static void main (String args[])
{
System.out.println(Products.list); //prints []
}
}
问题是您通过创建新产品创建了一个新列表,并在其上调用了showList。如果需要特定产品的列表,则应在正确的对象上调用该方法。Static为每个实例维护一个变量,因此它在静态时工作 问题在于,您通过创建新产品创建了一个新列表,并在其上调用了showList。如果需要特定产品的列表,则应在正确的对象上调用该方法。Static为每个实例维护一个变量,因此它在静态时工作 请参见下面的部分代码:
public static void main (String ...a)
{
Products o= new Products("Chocolate");
o.addToList();
Products o1= new Products("Icecream");
o1.addToList();
new Products().showList(); //This line is the culprit
您正在对象o和o1中添加列表,并在另一个对象上调用showList()。showList()
注意:
它适用于静态列表,因为它在产品类的所有对象之间共享,而非静态列表则不是这样。请参阅下面的部分代码:
public static void main (String ...a)
{
Products o= new Products("Chocolate");
o.addToList();
Products o1= new Products("Icecream");
o1.addToList();
new Products().showList(); //This line is the culprit
您正在对象o和o1中添加列表,并在另一个对象上调用showList()。showList()
注意:
它适用于静态列表,因为它是在产品类的所有对象之间共享的,而非静态列表则不是这样。首先,编译类不会得到您提到的结果。您不仅要编译Customer.java,还要执行Customer中的main方法
在我看来,你有两种主要的方法,一种是顾客,一种是店主。您希望在运行Customer#main()时,会看到Shopowner#main()中填充的内容。然而,这是不合理的:如果您运行Shopowner#main(),这是来自另一个运行Customer#main()的另一个进程。静态变量不会在不同的过程中传递
我相信你应该对编程有一些基本的了解。代码中有很多设计问题需要解决,但与上面提到的问题相比,它们变得微不足道了。…首先,编译类不会得到您提到的结果。您不仅要编译Customer.java,还要执行Customer中的main方法
在我看来,你有两种主要的方法,一种是顾客,一种是店主。您希望在运行Customer#main()时,会看到Shopowner#main()中填充的内容。然而,这是不合理的:如果您运行Shopowner#main(),这是来自另一个运行Customer#main()的另一个进程。静态变量不会在不同的过程中传递
我相信你应该对编程有一些基本的了解。您的代码中有许多设计问题需要解决,但与上面提到的问题相比,它们变得微不足道……Re:
Products(String c){c=itemname;}
该语句没有任何作用。成员itemname
仍将为null
。你想在那里做什么?也许你的意思是this.itemname=c代码>?对不起!那是打字错误,更正了。代码乱七八糟。你能把它格式化吗?Re:Products(stringc){c=itemname;}
那句话什么也不做。成员itemname
仍将为null
。你想在那里做什么?也许你的意思是this.itemname=c代码>?对不起!那是打字错误,更正了。代码乱七八糟。您能正确设置它的格式吗?如何从customer类检索此列表而不在此类中添加任何内容。我可以在product类中创建一个静态块并将其放入其中。还有其他想法吗。您的上述观点不清楚,您正在考虑将列表设置为静态?是的,我正在尝试将此列表设置为静态。现在我创建了另一个类Customer{new Products().showList()//Prints[]}如何在此处检索已填充的列表这很容易。列表将返回Customer类中的列表。@Malwaregeek如果您的查询已解决,请接受回答。如何从Customer类检索此列表而不在此类中添加任何内容。我可以在product类中创建一个静态块并将其放入其中。还有其他想法吗。您的上述观点不清楚,您正在考虑将列表设置为静态?是的,我正在尝试将此列表设置为静态。现在我创建了另一个类Customer{new Products().showList()//Prints[]}如何在此处检索已填充的列表这很容易。列表将返回Customer类中的列表。@Malwaregeek如果您的查询已解决,请接受回答。静态列表应在项目的整个生命周期内保留?@Malwaregeek是的,这完全正确。静态对象将在整个运行期间保留其生存期。静态列表应在项目的整个生存期内保留?@Malwaregeek是的,这是完全正确的。静态对象将在整个运行过程中保持其生命周期。好的,如果我将填充列表代码放在paramaetrized构造函数中,并从customer类调用它,它应该可以正常工作。新店主(“添加产品”);或者,不用为店主和客户创建单独的类,我可以创建一个单独的类retail,使用switch语句,我可以添加以店主身份添加产品或以客户身份购买产品的功能。那么,你到底在问什么?我不确定这是否是我的问题。。。我完全不知道你想表达什么。确保你知道你在问什么,并以其他人能理解的方式问。这不是关于初学者与否。有很多初学者会问:好吧:)我问的是你提到的设计问题。你能在回答中详细说明一下吗。你的问题是要求“改变统计数据”