यदि आपका इरादा पूरी तरह पैरामीटर अनुक्रम है, तो विधि ओवरलोडिंग बेकार है, क्योंकि आईएमएचओ, आप केवल बॉयलरप्लेट कोड (समान कोड दोहराते हुए) को प्रोत्साहित कर रहे हैं, और यदि पैरामीटर सभी समान डेटा प्रकार हैं, तो आपको एक संकलन प्राप्त होगा त्रुटि क्योंकि विधि हस्ताक्षर संदिग्ध हैं।
मैं जब एक पैरामीटर के रूप में कई डेटा प्रकार मौजूद कर सकते हैं विधि सुविधा प्रयोजनों के लिए एपीआई में अधिक भार का एक बहुत करते हैं: क्या आप मानकों का एक बहुत है, तो
public class Client {
public Status get(String request) {
return get(new Request(request));
}
public Status get(Request request) {
// do stuff
}
}
, और उनमें से कई वैकल्पिक, मैं करूंगा हैं Builder pattern में देखने का सुझाव देते हैं। बिल्डर पैटर्न का इरादा वैकल्पिक मानकों के निर्माण के लिए एक अपरिवर्तनीय वस्तु बनाना है। उदाहरण के लिए:
public String get(String arg0, String arg1, String arg2) {
// do stuff
}
public String get(String arg0, String arg1) {
return method(arg0, arg1, null);
}
public String method(String arg0) {
return method(arg0, null, null);
}
शायद एक बिल्डर के साथ सुधार किया जा सकता है:
class Request {
final String arg0;
final String arg1;
final String arg2;
private Request(Builder b) {
this.arg0 = b.arg0;
this.arg1 = b.arg1;
this.arg2 = b.arg2;
}
// getter methods
public static class Builder {
String arg0, arg1, arg2;
public Builder arg0(String arg) {
this.arg0 = arg;
return this;
}
public Builder arg1(String arg) {
this.arg1 = arg;
return this;
}
public Builder arg2(String arg) {
this.arg2 = arg;
return this;
}
public Request build() {
return new Request(this);
}
}
}
class Client {
public String get(Request request) { }
}
new Client().get(Request.Builder().arg0("arg0").arg1("arg1").arg2("arg2").build());
एक और अधिभार है कि मैं जब एक विधि अलग डेटा प्रकार के मापदंडों को स्वीकार कर सकते एक बहुत है:
public String lookup(String variant) {
return lookup(Integer.parseInt(variant));
}
public String lookup(int ordinal) {
// logic
}