return 数据类型不匹配
Mismatch of return datatype
我在重新指定 return 数据类型时遇到问题。我有实现 callabale 的 FOComp
class,'FOComp' returns 数据类型 List<ArrayList<Mat>>
的 call() 方法,如 'FOComp' class 下面.
和方法 'getResults()' returns 类型 ArrayList<Mat>
的数据,如下面的代码所示。目前,在 运行 时间,当我执行代码时,我收到以下错误:
此行有多个标记
- return 类型与
Callable<ArrayList<Mat>>.call()
不兼容
- return 类型与
Callable<List<Mat>>.call()
不兼容
请告诉我如何解决它。
'FOComp' class:
static class FOComp implements Callable<List<Mat>> {//should return list contains 4 mats(0,45,90,135)
private ArrayList<Mat> gaussianMatList = null;
private List<ArrayList<Mat>> results_4OrientAngles_List = null;
public FOComp(ArrayList<Mat> gaussianMatList) {
// TODO Auto-generated constructor stub
this.gaussianMatList = gaussianMatList;
this.results_4OrientAngles_List = new ArrayList<ArrayList<Mat>>();
}
public List<ArrayList<Mat>> call() throws Exception {
// TODO Auto-generated method stub
try {
featOrient = new FeatOrientation(this.gaussianMatList);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
featOrient.start();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
this.results_4OrientAngles_List.add(featOrient.getResults());
return results_4OrientAngles_List;
}
}
'getResults':
public ArrayList<Mat> getResults() {
if (this.crossAddOrientMapsList != null) {
if (!this.crossAddOrientMapsList.isEmpty()) {
if (this.crossAddOrientMapsList.size() == 4) {
double[] theta = new double[4];
theta[0] = 0;
theta[1] = 45;
theta[2] = 90;
theta[3] = 135;
for (int i = 0; i < this.crossAddOrientMapsList.size(); i++) {
MatFactory.writeMat(FilePathUtils.newOutputPath("FinalCrossAdd_" + theta[i]+"_degs"), this.crossAddOrientMapsList.get(i));
//ImageUtils.showMat(this.crossAddOrientMapsList.get(i), "OrientMap_" + theta[i] + " degs");
}
return this.crossAddOrientMapsList;
} else {
Log.WTF(TAG, "getResults", "crossAddOrientMapsList != 4 !!");
return null;
}
} else {
Log.E(TAG, "getResults", "crossAddOrientMapsList is empty.");
return null;
}
} else {
Log.E(TAG, "getResults", "crossAddOrientMapsList is null");
return null;
}
}
class FOComp implements Callable<List<Mat>>
和
public List<ArrayList<Mat>> call()
不是很兼容...你的call()
方法应该是
@Override public List<Mat> call()
此外,最好避免在方法签名中实现 类,而是使用接口(在这种情况下,使用 List
而不是 ArrayList
)。这也将解决 "multiple markers" 之一的问题 :-)
干杯,
你 class 声明说你要 return 一个 Mat 列表 (FOComp implements Callable<List<Mat>>
),但是你的 call
方法签名说你要 return Mat (List<ArrayList<Mat>>
) 的 ArrayList 列表。
您需要使它们保持一致。
我在重新指定 return 数据类型时遇到问题。我有实现 callabale 的 FOComp
class,'FOComp' returns 数据类型 List<ArrayList<Mat>>
的 call() 方法,如 'FOComp' class 下面.
和方法 'getResults()' returns 类型 ArrayList<Mat>
的数据,如下面的代码所示。目前,在 运行 时间,当我执行代码时,我收到以下错误:
此行有多个标记
- return 类型与
Callable<ArrayList<Mat>>.call()
不兼容
- return 类型与
Callable<List<Mat>>.call()
不兼容
请告诉我如何解决它。
'FOComp' class:
static class FOComp implements Callable<List<Mat>> {//should return list contains 4 mats(0,45,90,135)
private ArrayList<Mat> gaussianMatList = null;
private List<ArrayList<Mat>> results_4OrientAngles_List = null;
public FOComp(ArrayList<Mat> gaussianMatList) {
// TODO Auto-generated constructor stub
this.gaussianMatList = gaussianMatList;
this.results_4OrientAngles_List = new ArrayList<ArrayList<Mat>>();
}
public List<ArrayList<Mat>> call() throws Exception {
// TODO Auto-generated method stub
try {
featOrient = new FeatOrientation(this.gaussianMatList);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
featOrient.start();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
this.results_4OrientAngles_List.add(featOrient.getResults());
return results_4OrientAngles_List;
}
}
'getResults':
public ArrayList<Mat> getResults() {
if (this.crossAddOrientMapsList != null) {
if (!this.crossAddOrientMapsList.isEmpty()) {
if (this.crossAddOrientMapsList.size() == 4) {
double[] theta = new double[4];
theta[0] = 0;
theta[1] = 45;
theta[2] = 90;
theta[3] = 135;
for (int i = 0; i < this.crossAddOrientMapsList.size(); i++) {
MatFactory.writeMat(FilePathUtils.newOutputPath("FinalCrossAdd_" + theta[i]+"_degs"), this.crossAddOrientMapsList.get(i));
//ImageUtils.showMat(this.crossAddOrientMapsList.get(i), "OrientMap_" + theta[i] + " degs");
}
return this.crossAddOrientMapsList;
} else {
Log.WTF(TAG, "getResults", "crossAddOrientMapsList != 4 !!");
return null;
}
} else {
Log.E(TAG, "getResults", "crossAddOrientMapsList is empty.");
return null;
}
} else {
Log.E(TAG, "getResults", "crossAddOrientMapsList is null");
return null;
}
}
class FOComp implements Callable<List<Mat>>
和
public List<ArrayList<Mat>> call()
不是很兼容...你的call()
方法应该是
@Override public List<Mat> call()
此外,最好避免在方法签名中实现 类,而是使用接口(在这种情况下,使用 List
而不是 ArrayList
)。这也将解决 "multiple markers" 之一的问题 :-)
干杯,
你 class 声明说你要 return 一个 Mat 列表 (FOComp implements Callable<List<Mat>>
),但是你的 call
方法签名说你要 return Mat (List<ArrayList<Mat>>
) 的 ArrayList 列表。
您需要使它们保持一致。