На первый взгляд, я бы сказал, что было бы лучше сделать общий код в виде публичного статического метода в публичном классе. Это сделает метод полезным для любого класса, просто используя
UtilityClassName.methodName();
Это лучше, чем делать его конкретным методом в абстрактном суперклассе, потому что тогда вам всегда нужно будет расширять этот суперкласс во всех классах, где вы хотите использовать этот единственный метод.
Но теперь, как вы сказали, поведение метода зависит от некоторых переменных. Теперь, если это зависит от переменных экземпляра разных классов, лучше добавить этот метод в интерфейс и позволить всем вашим классам реализовать этот интерфейс и иметь свою собственную реализацию того же самого.
Но опять же, если эти переменные являются постоянными значениями, то эти постоянные значения должны быть в интерфейсе. Реализуйте этот интерфейс в своем служебном классе. И снова сделайте его статическим методом в этом служебном классе, который будет напрямую использовать эти константы.
Например, Рассмотрим за этот Общий код возврата области круга.
public interface TwoDimensional{
double PI = 3.14;
}
public class MyUtility implements TwoDimensional{
public static double getCircleArea(double radius){
return PI*radius*radius;
}
}
Здесь вы можете видеть, что метод getCircleArea() зависит от радиуса, который будет разным для разных классов, но тем не менее я могу передать это значение статическому методу класса myUtility.
person
whitehat
schedule
16.12.2011