分享"分享"的正确方法是什么?不同类中方法之间的变量?

时间:2015-08-18 11:39:10

标签: java methods

我试图在不同类别的方法之间共享变量,但我不知道我是否以正确的方式执行此操作。基本上当我想在方法2上使用变量时,我必须"运输"他们从A类的方法1到方法2,只是看看这个例子,因为我不知道如何正确解释这个。

这是正确的方法吗?因为有时候我通过一种过度的方法来做这件事,看起来很难看。

示例:

public class A {
    int var1, var2, var3;        
    B b = new B();        
    b.method1(var1, var2, var3);
}

public class B {
    public void method1(int var1, int var2, int var3){
       //doSomething
        method2(var2, var3);
    }

    public void method2(int var2, int var3){ 
        //doSomething
    } 
}
顺便问一下,有没有进行代码审查的社区?我对代码很陌生,我担心我创建的代码不是很有效。

感谢您的帮助! :)

4 个答案:

答案 0 :(得分:1)

您应该阅读encapsulation

使用appriopriate访问器传递封装在1个对象中的3个变量听起来对我来说是一个更好的选择(至少代码看起来更清晰)。

另外,考虑使用静态方法创建一个实用程序类,如果它当然有意义 - 有时你根本不需要类成员字段,因为这个类没有状态(Math class就是一个例子)并且返回某些计算/转换结果的静态方法是更好的选择。

在旁注中,我建议您考虑"编程接口"原理。您可以在顶部of this page上阅读相关部分。

答案 1 :(得分:1)

使用getter和setter从B获取A类变量,如下所示。

public class A {

    private int var1, var2, var3;

    public int getVar1(){
        return var1;
    }

    public void setVar1(int var1){
        this.var1 = var1;
    }

    public int getVar2(){
        return var2;
    }

    public void setVar2(int var2){
        this.var2 = var2;
    }

    public int getVar3(){
        return var3;
    }

    public void setVar3(int var3){
        this.var3 = var3;
    }
}

public class B{

    // Use var 1 from class A as following
    A a = new A();
    int x = a.getVar1(); //x has the value of Var1 now
    a.setVar1(2); // var1 in class A has value 2 now.
}

使用接口而不是直接调用另一个类的方法。

public class A {
    private InterfaceB interfaceB;

    interfaceB.method1(var1, var2, var3);
}

public interface InterfaceB{
    public void method1(int var1, int var2, int var3);
    public void method2(int var2, int var3);
}

public class B implements InterfaceB{

    @Override
    public void method1(int var1, int var2, int var3){
        //doSomething
        method2(var2, var3);
    }

    @Override
    public void method2(int var2, int var3){ 
        //doSomething
    }
}

答案 2 :(得分:0)

在B类中,您声明A类的实例,A类中的变量是public。什么时候可以在A类中使用变量。

答案 3 :(得分:0)

这是我的2美分......

public class Sample {
    //Property of the class
    private int valueA;

    //method to do some operation
    //that relies explicitly on a 
    //property of the class
    public void doSomething(){
        //valueA is over 9000!?
        int valueA = valueA + 9000;
    }

    //Method that does something that does not explicitly
    //rely on a property of the class
    //could be called from this or another class
    public int doSomeOperationWithSomething(int something){
        return something++;
    }
}

另一种方法是为您的方法创建静态“实用程序”类

public class Utils{
    public static int doMagic(int var){
        return var * var;
    }
}

像这样使用,

int num = Utils.doMagic(9);

当你有一些代码执行那个有用的东西时会出现这些问题,但是你无法弄清楚它放在哪里。

更重要的是,您需要在代码中维护正确的“封装”(Read about that)。这意味着限制其他类对变量的访问,并允许仅访问所需的内容。

public class Website {
    //No one should ever be able to
    //access this variable directly
    //So we set it a private
    private String article;

    //A reader should be able to get the aricle
    public String getArticle(){
        return article;
    }

    //The reader should never be able to set
    //an aticle on the website only read it
    //You can leave this part out or
    //set the method to private as i did.
    private void setArticle(String article){
        this.article = article;
    }
}

public class Reader {
    //Reference to website
    private Website website;

    public Reader(){

        ...

        //the user can read an article
        website.getArticle();

        // but this is not available to them
        website.setArticle("Some text"); // results in ERROR
    }
}