在作为参数

时间:2016-01-20 18:47:08

标签: java

如何在作为参数传递的对象上调用方法? 我知道对象通过了吗? 没有 传递的所有可能对象都有这种方法吗? 是

这就是我的意思:

    public void setOwled(Obj character){
    character.getIsOwled() = true;
}

getIsOwled()是常用方法,character是作为参数传递的object

setOwled()

是一个只有1个类的方法,它应该改变作为参数传递的对象的mVariable

2 个答案:

答案 0 :(得分:1)

我不确定这是否是你想要的,但也许你会发现它很有用:

这里的技巧是确切地知道Object作为参数传递给方法的是什么,该方法将决定一旦收到该特定对象将会做什么。

通常,在编码过程中,您确切地知道将要传递给您创建的方法的对象,因此将该参数显式声明为该特定的对象类型(例如String,int,double等),但确实有时间当你想要一个方法接受一个参数时,它可以是几个对象类型中的任何一个。这是最简单的部分,更难以确切知道每个对象类型实际命名的内容。变量类型(如String,Integer,Double,Float等)并不那么困难......但对于更复杂的对象,如控件,类等等。如果您已经使用Java一段时间了,那么您就不会去对此有疑问。

让我们创建一个小方法,它将确定作为参数传递给它的特定对象的类型名称:

public static String objectType(final Object objectVar) {
    try {
        // I like to turn Object Type names to Uppercase
        // so everything returned by this method will be
        // in Uppercase.
        return objectVar.getClass().getSimpleName().toUpperCase();
    }
    catch (Exception ex) { 
         System.out.println("\u001B[31m" + 
             "objectType() Method Exception - Unknown Object Type!" + 
             "\u001B[31m");
         return ""; 
    }
}

现在我们可能需要使用这个新的objectType()方法:

public void setOwled(Object argument){
    switch (objectType(argument)) {
        case "STRING":
            System.out.println("argument contains a String object type - " + argument.toString());
            break;
        case "INTEGER":
            System.out.println("argument contains a Integer object type - " + (int) argument);
            break;
        case "DOUBLE":
            System.out.println("argument contains a Double object type - " + (double) argument);
            break; 
        case "BOOLEAN":
            System.out.println("argument contains a Boolean object type - " + (boolean) argument);
            break;  
        case "JBUTTON":
            System.out.println("argument holds reference to a JButton object - " + argument);
            break;
    }
}

显然有很多对象类型名称,但你只需要担心你想要为你的特定方法专门处理的那个。

我希望你发现这很有用,如果不是至少......有趣。

答案 1 :(得分:0)

混合方法调用和属性设置。

我认为你的意思是这样的:

 class myObject1 {
    public String myName = "";
    // constructor - no return value
    public myObject1 (String aName) {
        this.myName = aName;
    }

    public void printMyName() {
        System.out.println("Object 1: My Name is: " + this.myName);
    }
}

class myObject2 {
    public String myName = "";
    // constructor - no return value
    public myObject2 (String aName) {
        this.myName = aName;
    }

    public void printMyName() {
        System.out.println("Object 2: My Name is: " + this.myName);
    }
}


class runClass {
    public static void main(String[] args) {

        Object [] elements = new Object[2];
        elements[0] = new myObject1("Jon Doe");
        elements[1] = new myObject2("Mr. Smith");

        for (int i = 0; i < elements.length; i++) {
            runClass.workOnElement(elements[i]);
        }
    }

    public static void workOnElement (Object theElem) {
      if (theElem instanceof myObject1) {
        myObject1 elem = (myObject1) theElem;
        elem.printMyName();
      } else if (theElem instanceof myObject2) {
        myObject2 elem = (myObject2) theElem;
        elem.printMyName();
      }
    }
}

打印:

Object 1: My Name is Jon Doe
Object 2: My Name is Mr. Smith