জাভা alচ্ছিক পরামিতি


812

আমি জাভাতে কীভাবে alচ্ছিক পরামিতি ব্যবহার করব? কোন স্পেসিফিকেশন alচ্ছিক পরামিতি সমর্থন করে?

উত্তর:


516

varargs এটি করতে পারে (একভাবে)। তা ছাড়া, পদ্ধতির ঘোষণায় সমস্ত পরিবর্তনশীল সরবরাহ করতে হবে must আপনি যদি কোনও ভেরিয়েবলটি alচ্ছিক হতে চান তবে আপনি প্যারামিটারের প্রয়োজন নেই এমন একটি স্বাক্ষর ব্যবহার করে পদ্ধতিটি ওভারলোড করতে পারেন।

private boolean defaultOptionalFlagValue = true;

public void doSomething(boolean optionalFlag) {
    ...
}

public void doSomething() {
    doSomething(defaultOptionalFlagValue);
}

পদ্ধতি ওভারলোডিং আমার মতে একটি ভাল উত্তর, অন্যদিকে ভারার্গ্স একটি খুব খারাপ উত্তর। হয় হয় varargs মন্তব্য মুছে ফেলুন বা একাধিক ফেরতের মান সম্ভাবনা দ্বারা গুরুতর অসুবিধা ব্যাখ্যা।
আন্দ্রেয়াস ভোগল

গ্লোবাল ভেরিয়েবল যুক্ত করা অন্য কিছু সমস্যার কারণ হতে পারে।
হেলেন চুই

1652

জাভাতে alচ্ছিক পরামিতিগুলি অনুকরণ করার বিভিন্ন উপায় রয়েছে:

  1. পদ্ধতি ওভারলোডিং।

    void foo(String a, Integer b) {
        //...
    }
    
    void foo(String a) {
        foo(a, 0); // here, 0 is a default value for b
    }
    
    foo("a", 2);
    foo("a");

    এই পদ্ধতির একটি সীমাবদ্ধতা হ'ল যদি একই ধরণের দুটি optionচ্ছিক পরামিতি থাকে এবং সেগুলির কোনও বাদ দেওয়া যায় তবে এটি কাজ করে না।

  2. ভারার্গস।

    ক) সমস্ত alচ্ছিক পরামিতি একই ধরণের:

    void foo(String a, Integer... b) {
        Integer b1 = b.length > 0 ? b[0] : 0;
        Integer b2 = b.length > 1 ? b[1] : 0;
        //...
    }
    
    foo("a");
    foo("a", 1, 2);

    খ) paraচ্ছিক পরামিতিগুলির প্রকারগুলি পৃথক হতে পারে:

    void foo(String a, Object... b) {
        Integer b1 = 0;
        String b2 = "";
        if (b.length > 0) {
          if (!(b[0] instanceof Integer)) { 
              throw new IllegalArgumentException("...");
          }
          b1 = (Integer)b[0];
        }
        if (b.length > 1) {
            if (!(b[1] instanceof String)) { 
                throw new IllegalArgumentException("...");
            }
            b2 = (String)b[1];
            //...
        }
        //...
    }
    
    foo("a");
    foo("a", 1);
    foo("a", 1, "b2");

    এই পদ্ধতির মূল অপূর্ণতা হ'ল alচ্ছিক পরামিতিগুলি যদি বিভিন্ন ধরণের হয় তবে আপনি স্ট্যাটিক ধরণের চেকিং হারাবেন। তদুপরি, যদি প্রতিটি প্যারামিটারের আলাদা অর্থ থাকে তবে তাদের আলাদা করার জন্য আপনার কিছু উপায় প্রয়োজন।

  3. NULLs। পূর্ববর্তী পদ্ধতির সীমাবদ্ধতাগুলি সমাধান করার জন্য আপনি নাল মানগুলিকে অনুমতি দিতে পারেন এবং তারপরে কোনও পদ্ধতিতে প্রতিটি পরামিতি বিশ্লেষণ করতে পারেন:

    void foo(String a, Integer b, Integer c) {
        b = b != null ? b : 0;
        c = c != null ? c : 0;
        //...
    }
    
    foo("a", null, 2);

    এখন সমস্ত আর্গুমেন্টের মান অবশ্যই সরবরাহ করতে হবে তবে ডিফল্ট মানগুলি শূন্য হতে পারে।

  4. .চ্ছিক ক্লাস। এই পদ্ধতির নালগুলির অনুরূপ, তবে পূর্বনির্ধারিত মান রয়েছে এমন পরামিতিগুলির জন্য জাভা 8 ptionচ্ছিক ক্লাস ব্যবহার করে:

    void foo(String a, Optional<Integer> bOpt) {
        Integer b = bOpt.isPresent() ? bOpt.get() : 0;
        //...
    }
    
    foo("a", Optional.of(2));
    foo("a", Optional.<Integer>absent());

    Ptionচ্ছিক কোনও কলারের জন্য কোনও পদ্ধতির চুক্তিকে সুস্পষ্ট করে তোলে, তবে, এই জাতীয় স্বাক্ষরটি খুব ভার্বোস খুঁজে পেতে পারে।

    আপডেট: জাভা 8 java.util.Optional-এর মধ্যে ক্লাসের বাইরে ক্লাস অন্তর্ভুক্ত রয়েছে , তাই জাভা ৮-তে এই বিশেষ কারণে পেয়ারা ব্যবহার করার দরকার নেই। যদিও পদ্ধতির নামটি কিছুটা আলাদা।

  5. বিল্ডার প্যাটার্ন। বিল্ডার প্যাটার্নটি নির্মাণকারীদের জন্য ব্যবহৃত হয় এবং আলাদা বিল্ডার শ্রেণি প্রবর্তন করে প্রয়োগ করা হয়:

     class Foo {
         private final String a; 
         private final Integer b;
    
         Foo(String a, Integer b) {
           this.a = a;
           this.b = b;
         }
    
         //...
     }
    
     class FooBuilder {
       private String a = ""; 
       private Integer b = 0;
    
       FooBuilder setA(String a) {
         this.a = a;
         return this;
       }
    
       FooBuilder setB(Integer b) {
         this.b = b;
         return this;
       }
    
       Foo build() {
         return new Foo(a, b);
       }
     }
    
     Foo foo = new FooBuilder().setA("a").build();
  6. মানচিত্র। যখন প্যারামিটারের সংখ্যা খুব বেশি থাকে এবং বেশিরভাগ ডিফল্ট মানগুলির জন্য সাধারণত ব্যবহৃত হয়, আপনি তাদের নাম / মানগুলির মানচিত্র হিসাবে পদ্ধতি যুক্তিগুলি পাস করতে পারেন:

    void foo(Map<String, Object> parameters) {
        String a = ""; 
        Integer b = 0;
        if (parameters.containsKey("a")) { 
            if (!(parameters.get("a") instanceof Integer)) { 
                throw new IllegalArgumentException("...");
            }
            a = (Integer)parameters.get("a");
        }
        if (parameters.containsKey("b")) { 
            //... 
        }
        //...
    }
    
    foo(ImmutableMap.<String, Object>of(
        "a", "a",
        "b", 2, 
        "d", "value")); 

    জাভা 9 এ, এই পদ্ধতিটি আরও সহজ হয়ে উঠেছে:

        @SuppressWarnings("unchecked")
        static <T> T getParm(Map<String, Object> map, String key, T defaultValue)
        {
            return (map.containsKey(key)) ? (T) map.get(key) : defaultValue;
        }
    
        void foo(Map<String, Object> parameters) {
            String a = getParm(parameters, "a", "");
            int b = getParm(parameters, "b", 0);
            // d = ...
        }
    
        foo(Map.of("a","a",  "b",2,  "d","value"));

অনুগ্রহ করে নোট করুন যে আপনি পছন্দসই ফলাফল অর্জন করতে এই যে কোনও পদ্ধতির একত্রিত করতে পারেন।


2
@ ভিটিলি ফেদোরেনকো হুম, আমি আপনাকে ধন্যবাদ জানালাম যে আপনি # in-তে একটি সামান্য অনুলিপি-পেস্ট-ভুল করেছেন: আপনি একটি পূর্ণসংখ্যার জন্য টাইপ-চেক করছেন যদিও আপনার aভেরিয়েবল একটি স্ট্রিং (কাস্ট সঠিক)।
অজানা আইডি

5
@ আপনার লিঙ্কটি মারা গেছে।
রবিনো

2
@ রোবিনোর বিকল্প লিঙ্কটি যুক্তি দিয়ে বলছে যে ptionচ্ছিকটি এখানে প্যারামিটার হিসাবে ব্যবহার করা উচিত নয় । Optionalবিকল্পগুলির মধ্যে একটিতে প্যারামিটার হিসাবে ব্যবহার করা সত্ত্বেও , এই উত্তরটি খুব ভাল।
ধেরিক

উপরের সমস্যার সর্বাধিক সাধারণ সমাধান সম্ভবত পদ্ধতি ওভারলোডিং। যদিও আমি কখনই সত্যই এর ভক্ত ছিলাম না। পার্সোনালি আমি পছন্দ করব যদি তারা কনফিগারেশন পরামিতিগুলির জন্য কোনও ধরণের সনাক্তকারী যুক্ত করে।
আলেকজান্ডার হিম 16

1
এটি সম্ভবত সেরা উত্তর হওয়া উচিত
সমস্তটি

104

জাভা 5.0 সহ optionচ্ছিক পরামিতি রয়েছে। কেবল আপনার ফাংশনটি এভাবে ঘোষণা করুন:

public void doSomething(boolean... optionalFlag) {
    //default to "false"
    //boolean flag = (optionalFlag.length >= 1) ? optionalFlag[0] : false;
}

আপনি সাথে doSomething();বা doSomething(true);এখন কল করতে পারে ।


13
এটি আসলে সঠিক উত্তর। এটি সহজ এবং কমপ্যাক্ট। কেবল মনে রাখবেন যে আপনি একাধিক প্যারামিটার পেতে পারেন তাই জাভা সেগুলি একটি অ্যারের ভিতরে রাখে। উদাহরণস্বরূপ, একটি একক প্যারামিটার পুনরুদ্ধার করতে আপনি প্রথমে অ্যারের সামগ্রীগুলি পরীক্ষা করতে পারবেন: 'কোড' বুলেটিয়ান পতাকা = (alচ্ছিক ফ্ল্যাশ.লাইনেটি <1)? মিথ্যা: optionচ্ছিক ফ্লেগ [0];
সালভাদোর ভ্যালেন্সিয়া

46
না, এটি সঠিক উত্তর নয়, কারণ এটি একক alচ্ছিক প্যারামিটারকে অনুমতি দেয় না, তবে কোনও সংখ্যক alচ্ছিক পরামিতি দেয়। যদিও এটি ওপি যা চায় তার কাছাকাছি হলেও এটি এক নয়। আপনার প্রয়োজনের চেয়ে বেশি পরামিতি গ্রহণ করা এটি বাগ এবং ভুল বোঝাবুঝির একটি সম্ভাব্য উত্স।
সলেস্কে

2
আপনার যদি মাত্র একটি optionচ্ছিক প্যারামিটার থাকে তবে এই পদ্ধতিটি কার্যকর হয় তবে আপনাকে অ্যারের দৈর্ঘ্য ইত্যাদি পরীক্ষা করতে হবে তাই এটি সুপার পরিষ্কার নয়: | আপনি যদি "একটি প্যারামিটার" doSomething() { doSomething(true); }
alচ্ছিক

যদি একাধিক alচ্ছিক প্যারামিটার থাকে তবে এটি কেবল একইভাবে কাজ করে যদি তারা সমস্ত একই ডেটা ধরণের থাকে। ঠিক আছে, আপনি প্রকারটি অবজেক্টটি তৈরি করতে পারেন তবে এটি সত্যিই কুৎসিত হচ্ছে।
জয়

যেমন @ স্লেস্কে উল্লেখ করেছে, ভারার্গস ব্যবহারের একাধিক মান পাস করার অনুমতি দেওয়ার ভয়াবহ অসুবিধা রয়েছে । ওপি স্পষ্টভাবে "alচ্ছিক" এর সমাধান সম্পর্কে জিজ্ঞাসা করেছিল যার অর্থ একটি মান বা শূন্য। কারও দ্বারা এটি কীভাবে একটি উত্তরের উত্তর হিসাবে বিবেচিত হতে পারে তা বাইন্ডো বাইন্ড।
Andreas Vogl

99

আপনি এর মতো কিছু ব্যবহার করতে পারেন:

public void addError(String path, String key, Object... params) { 
}

paramsপরিবর্তনশীল ঐচ্ছিক। এটি অবজেক্টের একটি nlalable অ্যারে হিসাবে গণ্য করা হয়।

আশ্চর্যজনকভাবে, ডকুমেন্টেশনে আমি এ সম্পর্কে কিছুই খুঁজে পাইনি, তবে এটি কার্যকর!

এটি জাভা 1.5 এবং এর বাইরে "নতুন" (জাভা 1.4 বা তার আগেরটি সমর্থিত নয়)।

আমি ব্যবহারকারীর ভূত এটি নীচে খুব উল্লেখ করেছি।


55

দুর্ভাগ্যক্রমে জাভা সরাসরি ডিফল্ট পরামিতি সমর্থন করে না।

তবে আমি জাভাবিয়ান টীকাগুলির একটি সেট লিখেছি এবং তাদের মধ্যে একটি নীচের মত ডিফল্ট পরামিতি সমর্থন করে:

protected void process(
        Processor processor,
        String item,
        @Default("Processor.Size.LARGE") Size size,
        @Default("red") String color,
        @Default("1") int quantity) {
    processor.process(item, size, color, quantity);
}
public void report(@Default("Hello") String message) {
    System.out.println("Message: " + message);
}

এটোটেশন প্রসেসর এটিকে যথাযথভাবে সমর্থন করার জন্য পদ্ধতি ওভারলোডগুলি উত্পন্ন করে।

Http://code.google.com/p/javadude/wiki/Annotations দেখুন

Http://code.google.com/p/javadude/wiki/AnnotationsDefaultParatersExample এ সম্পূর্ণ উদাহরণ


53

জাভাতে কোনও alচ্ছিক পরামিতি নেই। আপনি যা করতে পারেন তা হ'ল ফাংশনগুলি ওভারলোড করা এবং তারপরে ডিফল্ট মানগুলি পাস করা।

void SomeMethod(int age, String name) {
    //
}

// Overload
void SomeMethod(int age) {
    SomeMethod(age, "John Doe");
}

23

ভারআরগস এবং ওভারলোডিংয়ের কথা উল্লেখ করা হয়েছে। অন্য বিকল্পটি হ'ল একটি বিল্ডার প্যাটার্ন, যা দেখতে এরকম কিছু দেখাচ্ছে:

 MyObject my = new MyObjectBuilder().setParam1(value)
                                 .setParam3(otherValue)
                                 .setParam6(thirdValue)
                                 .build();

যদিও সেই প্যাটার্নটি আপনার পক্ষে যখন কোনও কনস্ট্রাক্টরে alচ্ছিক পরামিতি প্রয়োজন তখন সবচেয়ে উপযুক্ত হবে।


আমি সেই প্লেটারের পরামিতি নির্ভরতা যুক্ত করতে চাই। আমি যদি প্যারাম 1 সেট করি তবেই আমি প্যারাম 3 সেট করতে চাই। যেমন যেমন আমি যদি অগ্রগতি দৃশ্যমান সেট করি তবেই আমি অগ্রগতি বার্তা সেট করতে চাই। isProgressVisible ()। setProgressMessage ("লোডিং")। আমি কীভাবে এটি অর্জন করতে পারি?
হর্ষাল ভট্ট

14

জেডিকে> 1.5 এ আপনি এটি ব্যবহার করতে পারেন;

public class NewClass1 {

    public static void main(String[] args) {

        try {
            someMethod(18); // Age : 18
            someMethod(18, "John Doe"); // Age & Name : 18 & John Doe
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    static void someMethod(int age, String... names) {

        if (names.length > 0) {
            if (names[0] != null) {
                System.out.println("Age & Name : " + age + " & " + names[0]);
            }
        } else {
            System.out.println("Age : " + age);
        }
    }
}

7

আপনি এভাবে পদ্ধতি ওভারলোডিং ব্যবহার করে কিছু করতে পারেন।

 public void load(String name){ }

 public void load(String name,int age){}

এছাড়াও আপনি @ ননাল টীকা ব্যবহার করতে পারেন

public void load(@Nullable String name,int age){}

কেবল প্রথম পরামিতি হিসাবে নাল পাস।

আপনি যদি একই ধরণের ভেরিয়েবল পাস করে থাকেন তবে আপনি এটি ব্যবহার করতে পারেন

public void load(String name...){}

7

সংক্ষিপ্ত সংস্করণ :

তিনটি বিন্দু ব্যবহার :

public void foo(Object... x) {
    String first    =  x.length > 0 ? (String)x[0]  : "Hello";
    int duration    =  x.length > 1 ? Integer.parseInt((String) x[1])     : 888;
}   
foo("Hii", ); 
foo("Hii", 146); 

(@ ভিটালিই ফেডোরেনকো উত্তরের ভিত্তিতে)


2

ওভারলোডিং ঠিক আছে, তবে যদি ডিফল্ট মানের প্রয়োজন হয় এমন অনেকগুলি ভেরিয়েবল থাকে তবে আপনি এগুলি শেষ করবেন:

public void methodA(A arg1) {  }
public void methodA( B arg2,) {  }
public void methodA(C arg3) {  }
public void methodA(A arg1, B arg2) {  }
public void methodA(A arg1, C arg3) {  }
public void methodA( B arg2, C arg3) {  }
public void methodA(A arg1, B arg2, C arg3) {  }

সুতরাং আমি জাভা দ্বারা সরবরাহিত ভেরিয়েবল আর্গুমেন্টটি ব্যবহার করার পরামর্শ দেব। ব্যাখ্যার জন্য এখানে একটি লিঙ্ক


Varargs ব্যবহার খারাপ অভ্যাস হিসাবে বিবেচিত হয়। সিস্টেমে যদি এই জাতীয় (উপরে বর্ণিত) পদ্ধতিগুলির প্রয়োজন হয় তবে শ্রেণিক নকশাটি খারাপ দেখাচ্ছে বলে আপনার নতুন ডিজাইনের কথা ভাবা উচিত।
ডায়াবলো

2
জাভা ঘাটতির জন্য অজুহাত তৈরি করা এবং আরও অসুবিধাগুলি লক্ষ্য করে এবং কাজের অসুবিধাগুলি তৈরি করার জন্য অন্যকে খারাপ অভ্যাসের জন্য অভিযুক্ত করা আরও খারাপ অনুশীলন।
ব্রায়ানো

1
বাহ্যিক উত্সগুলির সাথে লিঙ্ক না করে আপনার উত্তরে সমস্ত প্রাসঙ্গিক তথ্য যুক্ত করুন - প্রদত্ত লিঙ্কটি মারা গেছে
নিকো হেস

2

আপনি এমন একটি ক্লাস ব্যবহার করতে পারেন যা আপনার alচ্ছিক মানগুলিকে ধারণ করতে কোনও বিল্ডারের মতো কাজ করে।

public class Options {
    private String someString = "default value";
    private int someInt= 0;
    public Options setSomeString(String someString) {
        this.someString = someString;
        return this;
    }
    public Options setSomeInt(int someInt) {
        this.someInt = someInt;
        return this;
    }
}

public static void foo(Consumer<Options> consumer) {
    Options options = new Options();
    consumer.accept(options);
    System.out.println("someString = " + options.someString + ", someInt = " + options.someInt);
}

মত ব্যবহার করুন

foo(o -> o.setSomeString("something").setSomeInt(5));

আউটপুট হয়

someString = something, someInt = 5

সমস্ত alচ্ছিক মানগুলি এড়িয়ে যাওয়ার জন্য আপনাকে এটিকে পছন্দ করতে হবে foo(o -> {});বা যদি আপনি পছন্দ করেন তবে আপনি একটি দ্বিতীয় foo()পদ্ধতি তৈরি করতে পারেন যা alচ্ছিক পরামিতিগুলি গ্রহণ করে না।

এই পদ্ধতির ব্যবহার করে, আপনি কোনও অস্পষ্টতা ছাড়াই কোনও ক্রমে alচ্ছিক মান নির্দিষ্ট করতে পারেন। আপনার বিভিন্ন ভার্সেসের প্যারামিটারগুলিও ভার্সের সাথে পৃথক নয়। এই বিকল্পটি আরও ভাল হবে যদি আপনি বিকল্প ক্লাস তৈরি করতে টিকা এবং কোড উত্পন্ন করতে পারেন।


1

জাভা এখন 1.8 এ বিকল্পগুলি সমর্থন করে, আমি অ্যান্ড্রয়েডে প্রোগ্রামিংয়ের সাথে আটকে আছি তাই আমি untilচ্ছিক ধরণের ব্যবহারের কোডটি রিফ্যাক্ট না করা পর্যন্ত নাল ব্যবহার করছি।

Object canBeNull() {
    if (blah) {
        return new Object();
    } else {
        return null;
    }
}

Object optionalObject = canBeNull();
if (optionalObject != null) {
    // new object returned
} else {
    // no new object returned
}

আপনি দয়া করে উদাহরণ দিতে পারেন?
সেফহর

1

ডিফল্ট যুক্তি জাভা ব্যবহার করা যাবে না। সি #, সি ++ এবং পাইথনগুলিতে যেখানে আমরা সেগুলি ব্যবহার করতে পারি ..

জাভাতে, আমাদের অবশ্যই ডিফল্ট পরামিতিগুলির পরিবর্তে 2 টি পদ্ধতি (ফাংশন) ব্যবহার করতে হবে।

উদাহরণ:

Stash(int size); 

Stash(int size, int initQuantity);

http://parvindersingh.webs.com/apps/forums/topics/show/8856498-java-how-to-set-default-parameters-values-like-c-


28
সি # এর নতুন সংস্করণগুলি ডিফল্ট পরামিতিগুলিকে অনুমতি দেয়।
সোগগার

2
জাভাতে কোনও প্যারামিটারের জন্য "..." বিকল্প রয়েছে।
কচো সান্তা

0

এটি প্রকৃত ptionচ্ছিক প্রকারের প্রবর্তনের আগেও সম্ভবত একটি পুরানো প্রশ্ন তবে এই দিনগুলিতে আপনি কয়েকটি বিষয় বিবেচনা করতে পারেন: - পদ্ধতি ওভারলোডিং ব্যবহার করুন - usedচ্ছিক প্রকারের প্রায়শই NULL পাস করা এড়ানো সুবিধা রয়েছে যা জাভা 8 এ সাধারণত ব্যবহৃত হওয়ার আগে চালু হয়েছিল was গুগলের পেয়ারা যেমন তৃতীয় পক্ষের লাইব থেকে। প্যারামিটার / আর্গুমেন্ট হিসাবে Usingচ্ছিক ব্যবহারকে অতিরিক্ত ব্যবহার হিসাবে বিবেচনা করা যেতে পারে কারণ মূল উদ্দেশ্যটি এটি একটি রিটার্ন সময় হিসাবে ব্যবহার করা ছিল।

রেফ: https://itcodehub.blogspot.com/2019/06/using-optional-type-in-java.html


0

মেথড ওভারলোডিং বা ডেটা টাইপ ব্যবহার করে আমরা alচ্ছিক প্যারামিটার তৈরি করতে পারি ...

| * | পদ্ধতি ওভারলোডিং:

RetDataType NameFnc(int NamePsgVar)
{
    // |* Code Todo *|
    return RetVar;
}

RetDataType NameFnc(String NamePsgVar)
{
    // |* Code Todo *|
    return RetVar;
}

RetDataType NameFnc(int NamePsgVar1, String NamePsgVar2)
{
    // |* Code Todo *|
    return RetVar;
}

সবচেয়ে সহজ উপায়

| * | ডেটা টাইপ ... paraচ্ছিক প্যারামিটার হতে পারে

RetDataType NameFnc(int NamePsgVar, String... stringOpnPsgVar)
{
    if(stringOpnPsgVar.length == 0)  stringOpnPsgVar = DefaultValue; 

    // |* Code Todo *|
    return RetVar;
}


8
RetDtaTyp... সিরিয়াসলি? কি RetDataTypeখুব আউট টাইপ করতে কঠিন?
আলেকজান্ডার - মনোকা

আপনি কি এই কোডটিতে আরও কিছু ব্যাখ্যা যুক্ত করতে পারেন? এই সমস্ত অদ্ভুত পরিবর্তনগুলি কী করে?
নিকো হাজে

সহজেই বোঝার জন্য পরিবর্তনশীল নাম পরিবর্তন করা হয়েছে ...
সুজয় ইউএন

0

আপনি যদি একাধিক পরামিতিগুলির সাথে একটি ইন্টারফেস ব্যবহার করার পরিকল্পনা করে থাকেন তবে কেউ নিম্নলিখিত স্ট্রাকচারাল প্যাটার্নটি ব্যবহার করতে পারেন এবং প্রয়োগ বা প্রয়োগ প্রয়োগকে ওভাররাইড করতে পারেন - আপনার প্রয়োজনের ভিত্তিতে একটি পদ্ধতি ।

public abstract class Invoker<T> {
    public T apply() {
        return apply(null);
    }
    public abstract T apply(Object... params);
}

0

যদি এটি একটি এপিআই এন্ডপয়েন্ট থাকে তবে একটি দুর্দান্ত উপায় হ'ল "স্প্রিং" টিকা ব্যবহার করা:

@GetMapping("/api/foos")
@ResponseBody
public String getFoos(@RequestParam(required = false, defaultValue = "hello") String id) { 
    return innerFunc(id);
}

এক্ষেত্রে লক্ষ্য করুন যে ইনারফানকের জন্য চলক প্রয়োজন হবে এবং যেহেতু এটি এপিআই শেষ পয়েন্ট নয়, তাই এই বসন্তের টীকাকে এটি alচ্ছিক করতে ব্যবহার করতে পারে না। তথ্যসূত্র: https://www.baeldung.com/spring-request-param

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.