如何在Java中调用参数的属性

如何在Java中调用参数的属性,java,function,object,eclipse-mars,Java,Function,Object,Eclipse Mars,因此,我正在创建一个函数,它接受一个对象参数,我需要访问参数的属性,如下所示: private double property; public void func(Object obj) { property = obj.prop; } 但每次我尝试这样做时,它都会给我一个错误:“'prop'无法解析或不是字段。”有没有一种“正确”的方法可以做到这一点? 如果有帮助的话,我正在使用EclipseMars.2来编辑这段代码 基于初始问题的原始答案: 您的语法不是javascript。以下

因此,我正在创建一个函数,它接受一个
对象
参数,我需要访问参数的属性,如下所示:

private double property;
public void func(Object obj) {
    property = obj.prop;
}
但每次我尝试这样做时,它都会给我一个错误:“'prop'无法解析或不是字段。”有没有一种“正确”的方法可以做到这一点? 如果有帮助的话,我正在使用EclipseMars.2来编辑这段代码

基于初始问题的原始答案: 您的语法不是javascript。以下是JS的外观:

var myObject = {
    myProperty: 'value',
    anotherProperty: 'some other value'
};

function func(obj) {
   var thisProperty = obj.myProperty;
}
嗯。。。标记已更改为Java。。。所以答案也会改变…

属性变量是一个没有“prop”属性的双精度值

假设您有这样一个对象:

public class MyObject {

    private double prop;

    public double getProp() { return this.prop; }

}
实例化MyObject的实例

MyObject myObj = new MyObject();
myObj.setProp(13.2);
该方法可能看起来像这样(在本例的类中):

将实例传递给方法:

MyService.func(myObj);
因此,我正在创建一个函数,它接受一个
对象
参数,我需要像这样访问参数的属性

参数不应声明为
对象类型
。它应该用该代码所在的任何类的名称声明

如果您有很好的理由将其声明为
对象类型
(例如,您正在重写
等于
),则需要进行类型检查,然后进行强制转换:

if (/*...appropriate type check here...*/) {
    property = ((TheClass)obj).property;
}
但是,通常你不应该这么做



关于“此处的适当类型检查”:检查类型的适当方法可能有所不同。例如,在许多情况下,
obj类的实例
已经足够好了。但是要覆盖
equals
,通常需要更复杂的内容,比如
this.getClass().equals(obj.getClass())
。您在编写的代码中使用了正确的工具来完成工作。

我想我已经找到了答案。我更改函数以获取
字符串
参数,并根据
字符串
参数的值将
对象
变量更改为不同类的实例

package main;

import creatures.Dune_Wolf;
import creatures.Rock_Jackal;
import creatures.Sandray;
import creatures.Talon_Snake;
import creatures.Wasteland_Wolf;

public class Combat {
    private Object enemy;
    /**
     * Instigates a battle scenario between 'player' and 'enemy'.
     * @param enemy
     */
    public void battle(String Enemy) {
        if (Enemy.equalsIgnoreCase("dune wolf")) {
            enemy = new Dune_Wolf();
        } else if (Enemy.equalsIgnoreCase("rock jackal")) {
            enemy = new Rock_Jackal();
        } else if (Enemy.equalsIgnoreCase("sandray")) {
            enemy = new Sandray();
        } else if (Enemy.equalsIgnoreCase("talon snake")) {
            enemy = new Talon_Snake();
        } else if (Enemy.equalsIgnoreCase("wasteland wolf")) {
            enemy = new Wasteland_Wolf();
        }
    }
}

引用的代码看起来不像JavaScript。我猜你完全是用另一种语言写的,Java。我已经为您编辑了标记。
对象
没有名为
prop
的字段。你可能需要一个石膏,但问题还是一样的,不是吗@Aomine'prop'只是
对象的一个示例属性。@Canvas16:不,一点也不。JavaScript不使用类型。这是一个类型问题。(哦,如果你看到上面的
getType
,点击refresh。显然是指
getClass
。我脑子里有一些奇怪的Java和C混搭。)如果我用一个特定的类声明参数,函数不就只接受该类实例的参数吗?我在自己的类中声明了几个对象,函数应该对所有对象都有效。@Canvas16:“如果我用一个特定的类声明了参数,那么函数不会只接受属于该类实例的参数吗?”是的。这很重要,因为您希望访问特定于该类的信息。“我在自己的类中声明了几个对象,函数应该适用于所有对象。”然后查看。我建议你从当前的任务中退一步,学习一些基本的教程。好吧。假设我标记了错误的语言。Java会是什么样子?我不会调用
属性
上的'prop'属性。我正在将
属性
设置为
obj.prop
,这是一个双值。@Canvas16我已经编辑了答案,以包含一些示例Java代码
package main;

import creatures.Dune_Wolf;
import creatures.Rock_Jackal;
import creatures.Sandray;
import creatures.Talon_Snake;
import creatures.Wasteland_Wolf;

public class Combat {
    private Object enemy;
    /**
     * Instigates a battle scenario between 'player' and 'enemy'.
     * @param enemy
     */
    public void battle(String Enemy) {
        if (Enemy.equalsIgnoreCase("dune wolf")) {
            enemy = new Dune_Wolf();
        } else if (Enemy.equalsIgnoreCase("rock jackal")) {
            enemy = new Rock_Jackal();
        } else if (Enemy.equalsIgnoreCase("sandray")) {
            enemy = new Sandray();
        } else if (Enemy.equalsIgnoreCase("talon snake")) {
            enemy = new Talon_Snake();
        } else if (Enemy.equalsIgnoreCase("wasteland wolf")) {
            enemy = new Wasteland_Wolf();
        }
    }
}