public Solution getReferenceSolution(Problem p) {
int personalityVal = 1;
int templateNameVal = 0;
...
Solution personality = getComponentFactory().constructSolution(personalityVal);
Solution templateName = getComponentFactory().constructSolution(templateNameVal);
...
return personality,templateName,..;
}
以下是解决方案类的原始代码:
public class Solution
extends Object
implements java.io.Serializable,
edu.indiana.iucbrf.feature.Featured,
Comparable,
edu.indiana.util.xml.XMLRepresentable {
private FeatureKey firstFeatureKey;
private FeatureCollection features;
/** Creates new Solution.
*/
protected Solution() {
}
public Solution(FeatureCollection features,
Domain domain) {
this.features = features;
}
public boolean getIsReferenceSolution() {
return features.getIsReferenceSolution();
}
public void setIsReferenceSolution(boolean isReferenceSolution) {
features.setIsReferenceSolution(isReferenceSolution);
}
public boolean equals(Object other) {
return (this.compareTo(other) == 0);
}
}
这是Domain类代码:
public Solution[] getReferenceSolution(Problem p)
throws UnsupportedOperationException {
Solution result;
if (!haveReferenceSolution)
throw new UnsupportedOperationException("Domain.getReferenceSolution: A getReferenceSolution() method has not been specified for this domain. If its use is required, please specify one using setEquivalenceClasses() or by overriding Domain.getReferenceSolution().");
else {
if (haveBooleanSolutionCutoff)
result = findNearestEquivalenceClass(p).applyTo(p, booleanSolutionCutoff);
else
result = findNearestEquivalenceClass(p).applyTo(p);
}
result.setIsReferenceSolution(true);
return result; //<---- error over here!
}
答案 0 :(得分:4)
你有很多选择。
如果你只想返回一个关于int的系列,那么simplets就是返回int[]
。例如
return new int[]{personalityVal, templateVal};
或
return new Solution[]{personality, templateName};
如果您想要返回键值类型的东西,请返回Map
,例如
Map<String, Integer> m = new HashMap<String, Integer>();
m.put("personalityVal", personalityVal);
m.put("templateVal", templateVal);
return m;
或
Map<String, Solution> m = new HashMap<String, Solution>();
m.put("personality", personality);
m.put("templateName", templateName);
return m;
Set
如果您想要返回唯一值,List
与Array非常相似但更广泛。//declare return type as Solution array
public Solution[] getReferenceSolution(Problem p) {
int personalityVal = 1;
int templateNameVal = 0;
...
Solution personality = getComponentFactory().constructSolution(personalityVal);
Solution templateName = getComponentFactory().constructSolution(templateNameVal);
...
return new Solution[]{personality, templateName}; //return the array
}
答案 1 :(得分:3)
基本上 - 你没有,如果你想返回多个值,创建一个只保存值的类并返回这个类的实例,或者在你的情况下 - 你可以返回一个解决方案数组而不仅仅是之一:
public Solution[] getReferenceSolution(Problem p) {
int personalityVal = 1;
int templateNameVal = 0;
...
Solution[] res = new Solution[2];
res[0] = getComponentFactory().constructSolution(personalityVal);
res[1] = getComponentFactory().constructSolution(templateNameVal);
...
return res;
}
但是即使在这里 - 你只返回一个对象,无论它是数组,地图,列表还是包含一些值的类实例。
答案 2 :(得分:1)
已经提到了很多选项,但是您可能还需要考虑一个选项:创建一个新的结果类来封装您想要返回的所有内容。它清楚地表明了返回的内容,而对于任意数组或集合,您不一定知道元素的用途。如果您需要返回更多对象,也会更容易。
答案 3 :(得分:0)
使函数返回List
或array
或Map
或HashTable
或任何其他可容纳多个值的Java对象。
答案 4 :(得分:0)
为什么不能返回解决方案数组?我认为这将是最简单的解决方案。