如何拥有动态方法参数

时间:2012-03-01 18:19:15

标签: java reflection

让我说我有一个方法

public abstract void doMath(Holder h);

但我希望用户能够调整传入的类。就像这样

public abstract void doMath(ClassOfPersonalChoice h);

我将如何做到这一点。

感谢您的时间和精力。

PS:传递的类包含一堆变量。 即

class ClassofPersonalChoice{
    double hue = 0;
int R = 240;
int G = 10;
int B = 180;
}

2 个答案:

答案 0 :(得分:2)

如果声明参数为Object类型,则可以传递任何内容。但你无法用它做任何事情,因为你不知道它是什么类型。这就是静态类型语言的工作方式。

理想情况下,您应该声明参数类型为SomeInterface,并且您传递的所有对象都应该是实现该接口的类的实例。这样你就会知道你可以对对象做什么操作,但你不需要知道它们的确切类。

答案 1 :(得分:1)

如果你说

public abstract void doMath(Object h);

然后用户可以实现他想要的任何东西。

高级创意:使用泛型/类型参数:

public abstract class MathClass<T> {

   public abstract void doMath(T holder);

}

public class IntegerMathClass extends MathClass<ClassOfPersonalChoice> {

    @Override
    public void doMath(ClassOfPersonalChoice holder) {
      // do something with the value
    }

 }