嵌套 class AsyncTask 无法修改外部 Class 静态对象
Nested class AsyncTask can't modify Outer Class static objects
我对嵌套 java class 有问题,它看到外部 class 对象但不知何故无法修改它。我读了很多类似的问题,但找不到解决这个问题的方法。这可能真的很简单,但我还不够好,无法弄清楚。
我有 Sorter class 在后台做一些计算,我决定使用 AsyncTask 在 UI 线程之外执行这些计算。
我的 class 看起来像这样
public class Sorter
{
private static List<Long> workingList;
private static int _numberOfContainers, _containerSize, _timesToRepeat;
private static Long _numbersFrom, _numbersTo, _sortingAlgorithmId;
public Sorter(int numberOfContainers, int containerSize, Long numbersFrom, Long numbersTo,
int timesToRepeat, Long sortingAlgorithmId)
{
_numberOfContainers = numberOfContainers;
_containerSize = containerSize;
_numbersFrom = numbersFrom;
_numbersTo = numbersTo;
_timesToRepeat = timesToRepeat;
_sortingAlgorithmId = sortingAlgorithmId;
// perform calculations in the background
new BackgroundCalculations().execute();
}
static class BackgroundCalculations extends AsyncTask<Void,Void,Void>
{
@Override
protected Void doInBackground(Void... voids)
{
workingList = new ArrayList<>(_containerSize);
// workingList is still null after this
_numbersTo += 1; // to fix exclusive number range to inclusive
Random rand = new Random();
for (int i = 0; i < _containerSize; i++)
{
workingList.add((long) (rand.nextDouble() * (_numbersTo - _numbersFrom)) + _numbersFrom))
}
// some calc
return null;
}
}
}
我尝试在 Sorter 构造函数中实例化 workingList,但嵌套 class 无论如何都无法将项目添加到 workingList。任何解决方案?也许更好的方式来实现没有此类问题的后台计算?
您在这里混淆了两个概念。
你的方法都是静态的;你的领域是两个。那么为什么要使用构造函数呢?表示您想要实例化 Sorter class 的对象?
因此,解决您的问题的第一件事是更好地理解您正在使用的概念。
我对嵌套 java class 有问题,它看到外部 class 对象但不知何故无法修改它。我读了很多类似的问题,但找不到解决这个问题的方法。这可能真的很简单,但我还不够好,无法弄清楚。 我有 Sorter class 在后台做一些计算,我决定使用 AsyncTask 在 UI 线程之外执行这些计算。 我的 class 看起来像这样
public class Sorter
{
private static List<Long> workingList;
private static int _numberOfContainers, _containerSize, _timesToRepeat;
private static Long _numbersFrom, _numbersTo, _sortingAlgorithmId;
public Sorter(int numberOfContainers, int containerSize, Long numbersFrom, Long numbersTo,
int timesToRepeat, Long sortingAlgorithmId)
{
_numberOfContainers = numberOfContainers;
_containerSize = containerSize;
_numbersFrom = numbersFrom;
_numbersTo = numbersTo;
_timesToRepeat = timesToRepeat;
_sortingAlgorithmId = sortingAlgorithmId;
// perform calculations in the background
new BackgroundCalculations().execute();
}
static class BackgroundCalculations extends AsyncTask<Void,Void,Void>
{
@Override
protected Void doInBackground(Void... voids)
{
workingList = new ArrayList<>(_containerSize);
// workingList is still null after this
_numbersTo += 1; // to fix exclusive number range to inclusive
Random rand = new Random();
for (int i = 0; i < _containerSize; i++)
{
workingList.add((long) (rand.nextDouble() * (_numbersTo - _numbersFrom)) + _numbersFrom))
}
// some calc
return null;
}
}
}
我尝试在 Sorter 构造函数中实例化 workingList,但嵌套 class 无论如何都无法将项目添加到 workingList。任何解决方案?也许更好的方式来实现没有此类问题的后台计算?
您在这里混淆了两个概念。
你的方法都是静态的;你的领域是两个。那么为什么要使用构造函数呢?表示您想要实例化 Sorter class 的对象?
因此,解决您的问题的第一件事是更好地理解您正在使用的概念。