как иметь параметры динамического метода - PullRequest
2 голосов
/ 01 марта 2012

Допустим, у меня есть метод

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 ]

2 голосов
/ 01 марта 2012

Если вы объявите аргумент типа Object, вы сможете передать что угодно.Но вы не сможете ничего с этим поделать, потому что не знаете, что это за тип.Именно так работают статически типизированные языки.

В идеале вы должны объявлять аргумент типа SomeInterface, и все передаваемые вами объекты должны быть экземплярами классов, реализующих этот интерфейс.Таким образом, вы будете знать, какие операции вы можете выполнять над объектами, но вам не нужно знать их точные классы.

1 голос
/ 01 марта 2012

Если вы говорите

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
    }

 } 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...