Replace Static Variable with Parameter

A function depending on a static variable needs to be reused in more general context.

Add a new parameter to the function and replace all references of the static variable within the function by this new parameter.

void printValues() {
	for (int i = 0; i < people.length; i++) {
		System.out.println(people[i].name+" has salary "+people[i].salary);
	}
}

public static void main(String args[]) {
	...
	printValues();
}

image/svg+xml

void printValues(PrintStream outfile) {
	for (int i = 0; i < people.length; i++) {
		outfile.println(people[i].name+" has salary "+people[i].salary);
	}
}

public static void main(String args[]) {
	...
	printValues(System.out);
}

Motivation

The original function is using a static variable, but you wish either to reuse the function in new project (not containing the static variable) or reuse the function in the same project but in more general context.

Mechanics

  • If the function calls other functions using the static variable in question, then use this refactoring on all those invoked functions first.
  • Use Add Parameter to add a new argument to the function
  • Add the static variable as actual argument to all callers of this function in.
  • Replace all references to the static variable within the function by the new argument