Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 全局变量的大小不同于返回列表的大小_Java_List - Fatal编程技术网

Java 全局变量的大小不同于返回列表的大小

Java 全局变量的大小不同于返回列表的大小,java,list,Java,List,我有一个变量public static List allbookids,它是全局定义的,并在构造函数中初始化为allbookids=dbFunctions.getAllBookIDs() 问题是,当我检查列表allBooks的大小时,值是28,但是当我检查由dbFunctions.getAllBookIDs()方法返回的列表的大小时,值是57。我有什么做错了吗 getAllBookId() public List getAllBookIDs(){ List allBooks=getAllBook

我有一个变量
public static List allbookids
,它是全局定义的,并在构造函数中初始化为
allbookids=dbFunctions.getAllBookIDs()

问题是,当我检查列表
allBooks
的大小时,值是28,但是当我检查由
dbFunctions.getAllBookIDs()
方法返回的列表的大小时,值是57。我有什么做错了吗

getAllBookId()

public List getAllBookIDs(){
List allBooks=getAllBooks();
List res=new ArrayList();
对于(b册:所有册){
res.add(b.getId());
}
返回res;
}   
私有列表getAllBooks(){
Query=manager.createQuery(“来自书本”);
返回query.getResultList();
}
更新

所以,问题解决了,但我不明白为什么变量要更新。我有一种方法,将全局变量的值分配给另一个变量
List nonRatedBooks=allBooksIDs
,然后该变量进行更新。我只是想:

List<Integer> nonRatedPubs = new ArrayList<>();
nonRatedPubs.addAll(allBooksIDs);
List nonratedsubs=new ArrayList();
非评级UBS.addAll(AllBooksID);

有人能解释为什么会这样吗?这样我以后就不会犯同样的错误了。

getAllBookIDs()
中有一个名为
allBooks
的变量,因此该方法返回的
列表将是内部定义的
allBooks
,不是全局定义的
allBooks
对象。

您在
getAllBookIDs()
中有一个名为
allBooks
的变量,因此此方法返回的
列表将是内部定义的
allBooks
,不是全局定义的
allBooks
对象。

它是屏蔽和初始化变量
allBooks
的组合。第一步是使用

constructor{
  allBooks = dbFunctions.getAllBookIDs(); // returns a list
}
在这一点上,它的大小是正确的,但是稍后如果您添加更多的
Book
,您将不再更新静态
allBooks
字段,这是因为在
getAllBookIDs
方法中屏蔽了变量名

public List<Integer> getAllBookIDs(){
    List<Book> allBooks = getAllBooks(); // this is a local field with the exact name as the static field and thus it will not assign it to the static field.
} 
public List getAllBookIDs(){
List allBooks=getAllBooks();//这是一个本地字段,其确切名称为静态字段,因此它不会将其分配给静态字段。
} 

它是屏蔽和初始化变量的组合
allbook
。第一步是使用

constructor{
  allBooks = dbFunctions.getAllBookIDs(); // returns a list
}
在这一点上,它的大小是正确的,但是稍后如果您添加更多的
Book
,您将不再更新静态
allBooks
字段,这是因为在
getAllBookIDs
方法中屏蔽了变量名

public List<Integer> getAllBookIDs(){
    List<Book> allBooks = getAllBooks(); // this is a local field with the exact name as the static field and thus it will not assign it to the static field.
} 
public List getAllBookIDs(){
List allBooks=getAllBooks();//这是一个本地字段,其确切名称为静态字段,因此它不会将其分配给静态字段。
} 


您如何检查尺寸?根据您在上面向我们展示的实际代码,我不认为这是可能的。“我有一个变量
public static List allbook
”。那是个坏主意。也就是说,您需要提供有关列表填充方式的更多信息。
所有书籍在您的code@TimBiegeleisen,我猜他使用的是getAllBookIDS().size():D您确定
manager.createQuery(“从书本”)
返回大小为57的列表吗?@TimBiegeleisen首先,我刚刚使用了
allBooks.size()
res.size()
,然后还对元素进行了迭代,并将值打印到控制台。您如何检查大小?根据您在上面向我们展示的实际代码,我不认为这是可能的。“我有一个变量
public static List allbook
”。那是个坏主意。也就是说,您需要提供有关列表填充方式的更多信息。
所有书籍在您的code@TimBiegeleisen,我猜他使用的是getAllBookIDS().size():D您确定
manager.createQuery(“从书本”)
返回大小为57的列表吗?@TimBiegeleisen首先,我只是使用了
allBooks.size()
res.size()
,然后还对元素进行了迭代,并将值打印到控制台。变量名称的屏蔽似乎合理+1静态变量的名称不同。我的计划失败了。已经编辑了帖子。变量名的屏蔽似乎是合理的+1静态变量的名称是不同的。我的计划失败了。已编辑帖子。静态变量的名称不同。我的计划失败了。我已经编辑了这篇文章。@Cap那么我的第一句话可能就是你要找的。每次调用
getAllBookId
时,它都会返回一个新的
ArrayList
,因此不会反映在静态字段上,除非您将其分配给它。问题是,我只给这个变量分配一次值。其他方法只是在使用它。@Cap Yes,正如我所说,构造函数init是
dbFunctions的当前快照。GetAllBookId()
当您添加更多书籍时,它不会用新对象更新自身。我理解这一点。我没有在这里添加任何值。我只需要读取它们,而不执行任何其他操作=)静态变量的名称不同。我的计划失败了。我已经编辑了这篇文章。@Cap那么我的第一句话可能就是你要找的。每次调用
getAllBookId
时,它都会返回一个新的
ArrayList
,因此不会反映在静态字段上,除非您将其分配给它。问题是,我只给这个变量分配一次值。其他方法只是在使用它。@Cap Yes,正如我所说,构造函数init是
dbFunctions的当前快照。getAllBookId()
当您添加更多书籍时,它不会用新对象更新自身。我理解