Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中作为参数传递的对象的访问字段?_Java_Object_Parameter Passing_Field - Fatal编程技术网

Java中作为参数传递的对象的访问字段?

Java中作为参数传递的对象的访问字段?,java,object,parameter-passing,field,Java,Object,Parameter Passing,Field,在Java中,是否可以访问作为方法中的参数传递的对象的字段 示例代码: void myMethod(ArrayList<Integer> list, MyClass object) { Integer myInt = object.x; // x is an Integer-type field in the object } void myMethod(ArrayList列表,MyClass对象){ 整数myInt=object.x;//x是对象中的整数类型

在Java中,是否可以访问作为方法中的参数传递的对象的字段

示例代码:

void myMethod(ArrayList<Integer> list, MyClass object) {   
        Integer myInt = object.x; // x is an Integer-type field in the object
}
void myMethod(ArrayList列表,MyClass对象){
整数myInt=object.x;//x是对象中的整数类型字段
}
我尝试了以下方法:
MyClass curObj=(MyClass)对象无效

有什么建议吗


当我使用
javac
进行编译时,我得到一个
找不到符号的错误。

如果我正确理解了这个问题,为什么不直接访问对象呢?e、 g.如果对象有一个成员
memberName
methodName()
方法,这是公共的,您只需执行以下操作即可

void myMethod(ArrayList<Integer> list, MyClass object) {   
    object.memberName = "member Name"
    object.methodName();
}
void myMethod(ArrayList列表,MyClass对象){
object.memberName=“成员名称”
object.methodName();
}
当然,示例代码应该按原样工作。
请确保字段x在MyClass中有单词
public

//In MyClass
public Integer x;
如果不将其声明为公共,则必须提供一个getter方法。这是正常情况下(private+getter)的Javabean

//In MyClass
private Integer x;
public Integer getX()
{
  return x;
}

void myMethod(ArrayList<Integer> list, MyClass object) {   
    Integer myInt = object.getX(); // x is an Integer-type field in the object
}
//在MyClass中
私有整数x;
公共整数getX()
{
返回x;
}
void myMethod(ArrayList,MyClass对象){
整数myInt=object.getX();//x是对象中的整数类型字段
}

您不必强制转换“对象”,因为它是名称中唯一的对象,您将获得一个MyClass对象

我的意思是你得到的是
MyClass对象
而不是
object对象

要像那样访问x,请确保它是公共的,但您应该在MyClass中创建一个访问器方法:

public Integer getX()
{
    return x;
}
并将您的线路更改为:

Integer myInt = object.getX();

没有理由不起作用,除非

  • 对象
    为空(但这将是运行时错误,而不是编译时错误)
  • x
    不是公共的,
    myMethod
    不是
    MyClass
    类的方法

是的,如果您的属性被声明为公共属性,则有可能。例如:

public class MyClass {
    public int test;
}

class Test {
    public printMyClass( MyClass c ) {
        System.out.println( c.test );
    }
}
或者您可以有一个返回测试值的方法,并且只有MyClass可以修改测试属性(更好)


只有当
MyClass.x
是公共文件时,才是。否则,您可以通过该属性的getter/setter方法访问它。Java实际上是在将引用的副本传递给对象,因此,尽管被调用的方法只处理引用副本,但无论您是通过引用还是通过引用的副本访问它,底层对象都是相同的。对象的状态也会暴露在被调用的方法中,以便进行潜在的更改。

调试时,请检查
对象
对象,首先查看它是否为null。如果MyClass.x具有正确的可见性(请尝试public),则这应该可以工作。
public class MyClass {
    private int test;
    public int getTest() {
        return test;
    }
}

class Test {
    public printMyClass( MyClass c ) {
        System.out.println( c.getTest() );
    }
}