java从private方法返回public

时间:2011-09-29 17:28:43

标签: java methods return

我有一个公共方法和一个私有方法。他们都应该返回int值。私有方法是完成所有工作的方法,公共方法是从主程序调用的方法。如何通过公共方法返回私有方法返回的结果?

就像这样

public int longer()
{
  longer(a.length);
}

private int longer(int n)
{
  int index

  //find largest index recursively 
  //make recursive call longer(n-1)
  return index;
}

我想将它传递给public方法,然后从那里返回它。我是否可以通过返回long.index从公共方法返回它;或类似的东西?

我想我应该澄清一下。不是指数。 idnex是根据传递给方法的内容计算的。公共和私人是因为它将成为一种递归方法。我将编辑我上面发布的内容,以使其准确地说明我想要做的事情。传入数组并以递归方式处理它。

3 个答案:

答案 0 :(得分:4)

public int longer()
{
    return longerInternal(a.length);
}

private int longerInternal(int n)
{
    int index

    //find largest index recursively 
    //make recursive call longer(n-1)
    return index;
}

通过public方法,您可以调用private方法。我重命名了private方法,以便您的方法没有命名冲突。一个简单的实现应该是这样的:

public class MyClass {
    private int[] a;

    public MyClass(int[] _a) {
        a = _a;
    }

    public int longer()
    {
        return longerInternal(a.length);
    }

    private int longerInternal(int n)
    {
        int index;
        //do recursive call
        return index;
    }
}

它可以像这样调用:

MyClass myClass = new MyClass(new int[]{1,2,3,4,5,10});
int result = myClass.longer();

答案 1 :(得分:0)

首先,您可能需要更好的功能名称。

您将调用public函数getLonger(int n),然后将其传递给您的私人longer(int n)函数。完成此功能后,它将返回getLonger(int n),然后返回给调用者。

答案 2 :(得分:0)

您在评论的回答中提到“调用者不需要访问类的所有内部工作。”

对我来说,这表明您想要使用界面。

创建一个描述将包含该秘密算法的类的接口:

package com.stevej;

public interface Longer {

  public int longer();

}

使用您的秘密算法实现该界面:

package com.stevej;

public class LongerImpl implements Longer {

  private int longer(int n){
    return 0; // whatever
  }

  @Override
  public int longer() {
    return longer(5); // whatever
  }

}

现在调用者只使用接口定义创建对象,保证没有他可以偶然访问的公开方法。该实现与该接口定义的对象挂钩:

package com.stevej;

public class LongerProcessor {

  Longer longerImpl = new LongerImpl();

  public LongerProcessor() {
    super();
  }

  public int longer() {
    return longerImpl.longer();
  }

}

现在您可以根据需要随时重写Longer的实现。只要接口定义永远不会改变,调用者(LongerProcessor)就不会有问题。哎呀,你可以有两个或更多不同的实现(LongerImplRecursive,LongerImplBruteForce等等),每个实现Longer,并且在同一个程序中的不同位置都使用:

package com.stevej;

public class LongerProcessor {

  Longer longerImpl;

  public LongerProcessor(boolean useRecursive) {
    super();

    if (useRecursive){
      longerImpl = new LongerImplRecursive();
    }else{
      longerImpl = new LongerImplBruteForce();
    }
  }

  public int longer() {
    return longerImpl.longer();
  }

}

那有多酷?既然你把这个问题标记为“家庭作业”,我想知道问题是否应该让你考虑将合同(接口)与实现(实现类)分开。