在Java / OOP编程中传递参数,好的和坏的实践

时间:2014-05-20 08:33:23

标签: java oop methods arguments

我最近开始用Java编写android应用程序,我是Java的新手,我在大学里用c ++编写面向对象编程的基础知识。我的问题是,什么是好的和坏的练习将变量数据传递给Java中的不同方法?例如,我在代码中一直在做的事情是:

String one;
String two;
String three;
String four;

exampleOne(one, two, three, four);

exampleOne(String one, String two, String three, String four) {
      // do something
      exampleTwo(one, two, three, four);
}

exampleTwo(String one, String two, String three, String four) {
      // do something
      exampleThree(one, two, three, four);
}

exampleThree(String one, String two, String three, String four) {
      // do something
}

在我的代码中,我做了类似这样的事情,我将参数传递了5次,这是不好的做法吗?什么是更清洁的生态选择?

4 个答案:

答案 0 :(得分:2)

如果有很多参数并且它们会被多次传递,我会选择DTO对象。

创建一个Pojo类,它封装这些参数并在方法之间传递实例。您也可以在DTO中添加一些辅助函数/方法,以简化某些处理。

答案 1 :(得分:1)

嗯,当您想要使用某些属性调用方法时,需要传递参数,但是对于相同类型的大量参数,您可以使用以下内容。

您可以改为使用VarArgs

public void Method(String.. str) {
   //Here you will have Array  str[](Of String)  
  if(str!=null)
   for (String s: str) 
    System.out.println(s);//Iterate through Array for More Processing

}

如果你想传递其他参数

 Method(int i, String... Other) {
    //VarArgs Must be Last
  }

注:的 传递不同类型的参数并使用转换方法将String转换为Double,Int等(这是不推荐的,但可以这样做,因为你需要确保你在哪个地方传递了double,int等)

答案 2 :(得分:1)

你做了什么没有错,但你可以使用varargs(如TAsk所述)或通过创建一个代表一组参数的小容器类(如ac结构,通常称为bean)来澄清事情。

这使您可以整理东西并使代码更具可读性。 请注意,在创建类时,由于新的分配会引入一些开销,而c-struct则不然,因为它是管理对struct成员的引用的编译器。

参数在堆栈中传递,就像在c中一样,并且java中没有by-reference-arguments的概念,使用bean可以克服这个限制。

答案 3 :(得分:1)

声明这样的类可能很有用:

public class YourClass{

    private String one;
    private String two;
    private String three;
    private String four;

    public YourClass(String one, String two, String three, String four){
        this.one = one;
        this.two = two;
        this.three = three;
        this.four= four;
    }

    public void exampleOne() {
          // do something
          exampleTwo();
    }

    public void exampleTwo() {
          // do something
          exampleThree();
    }

    public void exampleThree() {
          // do something
    }

}

并使用它:

YourClass c = new YourClass(one, two, three, four);
c.exampleOne();