如何使此函数返回超过1的值?

时间:2011-04-11 05:41:27

标签: java

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!
    }

5 个答案:

答案 0 :(得分:4)

你有很多选择。

  1. 如果你只想返回一个关于int的系列,那么simplets就是返回int[]。例如

    return new int[]{personalityVal, templateVal};
    

    return new Solution[]{personality, templateName};
    
  2. 如果您想要返回键值类型的东西,请返回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;
    
  3. 您可以退回任何其他收藏品。例如。 Set如果您想要返回唯一值,List与Array非常相似但更广泛。

  4. //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)

使函数返回ListarrayMapHashTable或任何其他可容纳多个值的Java对象。

答案 4 :(得分:0)

为什么不能返回解决方案数组?我认为这将是最简单的解决方案。