我试图在不同类别的方法之间共享变量,但我不知道我是否以正确的方式执行此操作。基本上当我想在方法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
}
}
顺便问一下,有没有进行代码审查的社区?我对代码很陌生,我担心我创建的代码不是很有效。
感谢您的帮助! :)
答案 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
}
}