ජාවා පෙරනිමි පරාමිති අගයන්ට සහය දක්වයිද?


1680

පහත දැක්වෙන ව්‍යුහය සහිත ජාවා කේත කිහිපයක් මට හමු විය:

public MyParameterizedFunction(String param1, int param2)
{
    this(param1, param2, false);
}

public MyParameterizedFunction(String param1, int param2, boolean param3)
{
    //use all three parameters here
}

C ++ හි මට පෙරනිමි අගයක් පැවරිය හැකි බව මම දනිමි. උදාහරණයක් වශයෙන්:

void MyParameterizedFunction(String param1, int param2, bool param3=false);

ජාවා මේ ආකාරයේ සින්ටැක්ස් සඳහා සහය දක්වයිද? මෙම පියවර දෙකේ වාක්‍ය ඛණ්ඩය වඩාත් සුදුසු වීමට හේතු තිබේද?


88
කෙසේ වෙතත්, තනන්නාගේ රටාව උදව් විය හැකිය.
ඩේව් ජාවිස්

54
මට ඇත්තටම මෙම අංගය මග හැරී ඇත. ශ්‍රිතයකට හෝ ඉදිකිරීම්කරුවකුට අමතර පරාමිතියක් ගෙනයාමට පවතින කේතය වෙනස් කිරීමේදී එය බොහෝ සෙයින් උපකාරී වේ
ජාටින්

4
At ජටින් සූර්යග්‍රහණය සමඟ “ක්‍රම අත්සන වෙනස් කරන්න” ප්‍රතිනිර්මාණය කිරීමෙන් ඔබට පරාමිතියක් එක් කළ හැකි අතර පවතින ඉන්වොයිසර් භාවිතා කරන පෙරනිමි අගයක් ලබා දිය හැකිය.
අර්වින් බොල්විඩ්

2
@ අර්වින් බොල්විඩ් ස්තූතියි. මම ඇන්ඩ්‍රොයිඩ් ස්ටුඩියෝ භාවිතා කරන අතර, එම ක්‍රමය නැවත ප්‍රතිනිර්මාණය කිරීමේ සහ පෙරනිමි අගයන් සැපයීමේ විකල්පයක් ද ඇත. බෙහෙවින් ප්‍රයෝජනවත්.
ජාටින්

3
@temporary_user_name public MyParameterizedFunction(String param1, int param2)යනු ඉදිකිරීම්කරුවෙකු මිස ක්‍රමයක් නොව ප්‍රකාශනයකි.
මාරියෝ ඉෂාක්

Answers:


963

නැත, ඔබ සොයාගත් ව්‍යුහය ජාවා එය හසුරුවන ආකාරයයි (එනම් පෙරනිමි පරාමිතීන් වෙනුවට අධි බර පැටවීම සමඟ).

ඉදිකිරීම්කරුවන් සඳහා, over ලදායී ජාවා බලන්න: ක්‍රමලේඛන භාෂා මාර්ගෝපදේශයේ අයිතමය 1 ඉඟිය (වැඩිපුර පැටවීම සංකීර්ණ වන්නේ නම් ඉදිකිරීම්කරුවන් වෙනුවට ස්ථිතික කර්මාන්තශාලා ක්‍රම සලකා බලන්න). වෙනත් ක්‍රම සඳහා, සමහර අවස්ථා නැවත නම් කිරීම හෝ පරාමිති වස්තුවක් භාවිතා කිරීම උපකාරී වේ. මෙය ඔබට ප්‍රමාණවත් තරම් සංකීර්ණ වූ විට අවකලනය කිරීම දුෂ්කර ය. නිශ්චිත අවස්ථාවක් නම්, සංඛ්‍යා හා වර්ගය පමණක් නොව පරාමිති අනුපිළිවෙල භාවිතා කරමින් ඔබට වෙනස හඳුනාගත යුතුය.



137
Ar ජැරෝඩ් රොබර්සන්: ස්ථිතික කර්මාන්තශාලා ක්‍රමවලට වඩා හානිකර නොවේ new. ඔවුන් කරන්නේ භාවිතා සියලු කාලය නව කේතය දී. සරල වටිනාකම් සහිත වස්තු සඳහා තනන්නන් බොහෝ විට අධික ඉංජිනේරු විද්‍යාවේ ප්‍රති result ලයකි.
ලී

12
Ar ජැරොඩ් රොබර්සන්: සම්පාදකයා හරහා නිවැරදි භාවිතයට බල කිරීමේ සිත්ගන්නා ක්‍රමය, බෙදා ගැනීමට ස්තූතියි! අනාගත තනතුරු සඳහා මිත්‍රශීලී යෝජනාව: නොගැලපෙන ප්‍රභව කේත පේළි 300 ක් බොහෝ දෙනෙකුට ජීර්ණය කිරීමට ටිකක් වැඩි විය හැකිය (කේතය ලිවීමට වඩා කියවීමට අපහසුය, සියල්ලට පසු). නැවත ස්තූතියි!
ක්‍රිස්ටියන් අයිචින්ගර්

17
Ar ජැරොඩ් රොබර්සන්: හොඳයි, ඒ දෙස බලා සිටීම! මට සන්නිවේදනය කිරීමට අවශ්‍ය දේ: ඔබේ බ්ලොග් පා er කයෙකු ලෙස, සිදුවෙමින් පවතින දේ පිළිබඳ කෙටි පෙළ විස්තරයක් සහිත පේළි 50 ක උදාහරණයක් මට සන්දර්භය නොමැතිව පේළි 300 කට වඩා වැඩි ගණනකට උපකාරී වනු ඇත.
ක්‍රිස්ටියන් අයිචින්ගර්

8
17 user177800 එකඟ නොවන්න - පිරිසිදු කාර්යයන් ලෙස ලියා ඇත්නම් ස්ථිතික ක්‍රම පරිපූර්ණ වේ. ස්ථිතික ශ්‍රිතයක් විකෘති වූ විට ඒවා ගැටළුවක් බවට පත්වේ ...
ලෙවි ෆුලර්

645

නැත, නමුත් ඔබට මෙම ගොඩගැසීමේ පිළිතුරෙහි විස්තර කර ඇති පරිදි, බිල්ඩර් රටාව භාවිතා කළ හැකිය .

සම්බන්ධිත පිළිතුරෙහි විස්තර කර ඇති පරිදි, බිල්ඩර් රටාව ඔබට කේත ලිවීමට ඉඩ දෙයි

Student s1 = new StudentBuilder().name("Eli").buildStudent();
Student s2 = new StudentBuilder()
                 .name("Spicoli")
                 .age(16)
                 .motto("Aloha, Mr Hand")
                 .buildStudent();

සමහර ක්ෂේත්‍රවල පෙරනිමි අගයන් තිබිය හැකි හෝ වෙනත් ආකාරයකින් විකල්ප විය හැකිය.


143
අවසාන වශයෙන් ඉදි කරන්නන්ගේ රටාවට පිටු 2 කට වඩා අඩු උදාහරණයකි.
nevvermind

14
මට කුතුහලයක් තිබුණත්, තනන්නාගේ රටාව භාවිතා කරන විට අපට තනන්නා පන්තියක් අවශ්‍ය වන්නේ ඇයි? මම සිතුවේ ශිෂ්‍ය s1 = නව ශිෂ්‍ය () නම ("ස්පිකෝලෝ") වයස (16) .මොටෝ ("ඇලෝහා, මිස්ටර් හෑන්ඩ්);
ivanceras

52
anceivanceras: පන්තිවලට අවශ්‍ය ක්ෂේත්‍ර ඇති විට එය අදාළ වන අතර, එම පංති අවලංගු තත්වයකට ගෙන ඒමට ඔබට අවශ්‍ය නොවේ. එබැවින් ඔබ දැන් කීවා Student s1 = new Student().age(16);නම්, එය ඔබට නමක් නොමැති ශිෂ්‍යයෙකු සමඟ ඉතිරි වනු ඇත, එය නරක විය හැකිය. එය නරක නොවේ නම්, එවිට ඔබේ විසඳුම හොඳයි.
එලී කෝට්රයිට්

58
anceivanceras: තවත් හේතුවක් නම් ඉදිකිරීම් වලින් පසු ඔබේ පන්තිය වෙනස් කළ නොහැකි වීමයි, එබැවින් එහි අගයන් වෙනස් කරන ක්‍රමවේදයන් ඔබට අවශ්‍ය නොවනු ඇත.
ජූල්ස්

3
anceivanceras: මම කරුණු 3 ක් සඳහා බිල්ඩර්ස් භාවිතා කළෙමි - බහුවිධ තර්කය සහ චතුර ලෙස ආරම්භ කිරීම, වෙනස් කළ නොහැකි බව සහ වඩාත් වැදගත් ලෙස ගොඩනැඟීමේ () ක්‍රමයේදී ඩොමේන් වස්තුව වලංගු කිරීමට මට හැඟේ. අවලංගු නම් වස්තු නිදසුනක් නිර්මාණය කරන්නේ ඇයි? කර්මාන්තශාලා ක්‍රම ඉහත සඳහන් පරිදි බිල්ඩ් ෆ්‍රෙෂ්මන් (), බිල්ඩ් සීනියර් () යනාදිය
අභිජීත් කුෂේ

489

ජාවා හි පෙරනිමි පරාමිතීන් අනුකරණය කිරීමට ක්‍රම කිහිපයක් තිබේ:

  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");

    මෙම ප්‍රවේශයේ එක් සීමාවක් නම්, ඔබට එකම වර්ගයේ විකල්ප පරාමිතීන් දෙකක් තිබේ නම් එය ක්‍රියාත්මක නොවන අතර ඒවායින් කිසිවක් මඟ හැරිය හැක.

  2. වර්ග්ස්.

    a) සියලුම විකල්ප පරාමිතීන් එකම වර්ගයට අයත් වේ:

    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);

    ආ) විකල්ප පරාමිතීන් වර්ග වෙනස් විය හැකිය:

    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");

    මෙම ප්‍රවේශයේ ඇති ප්‍රධානම අඩුපාඩුව නම් විකල්ප පරාමිතීන් විවිධ වර්ගවල නම් ඔබට ස්ථිතික වර්ග පරීක්ෂාව අහිමි වීමයි. තවද, සෑම පරාමිතියකටම වෙනස් අර්ථයක් තිබේ නම් ඒවා වෙන්කර හඳුනා ගැනීමට ඔබට යම් ක්‍රමයක් අවශ්‍ය වේ.

  3. ශූන්‍ය. පෙර ප්‍රවේශයන්හි සීමාවන් ආමන්ත්‍රණය කිරීම සඳහා ඔබට ශුන්‍ය අගයන්ට ඉඩ දිය හැකි අතර ඉන්පසු ක්‍රමවේදය තුළ එක් එක් පරාමිතීන් විශ්ලේෂණය කරන්න:

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

    දැන් සියලු තර්ක අගයන් ලබා දිය යුතුය, නමුත් පෙරනිමි ඒවා ශුන්‍ය විය හැකිය.

  4. විකල්ප පන්තිය. මෙම ප්‍රවේශය ශුන්‍යයට සමාන ය, නමුත් පෙරනිමි අගයක් ඇති පරාමිතීන් සඳහා ජාවා 8 විකල්ප පන්තිය භාවිතා කරයි:

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

    විකල්පයක් මඟින් ඇමතුම්කරුවෙකු සඳහා ක්‍රම කොන්ත්‍රාත්තුවක් පැහැදිලි කරයි, කෙසේ වෙතත් යමෙකුට එවැනි අත්සනක් වාචිකව සොයාගත හැකිය.

  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 = (String)parameters.get("a");
        } else if (parameters.containsKey("b")) { 
            //... 
        }
        //...
    }
    
    foo(ImmutableMap.<String, Object>of(
        "a", "a",
        "b", 2, 
        "d", "value")); 

ප්‍රිය ප්‍රති .ලයක් ලබා ගැනීම සඳහා ඔබට මෙම ඕනෑම ප්‍රවේශයක් ඒකාබද්ධ කළ හැකි බව කරුණාවෙන් සලකන්න.


1
හොඳ පැහැදිලි කිරීමක්. මේ වගේ ප්‍රතිලාභ අගයන් මම කවදාවත් දැකලා නැහැ. 5 සඳහා) return thisකරන්නේ කුමක්ද? එසේම, FooBuilder().setA("a").build();(අර්ථ දැක්වීම අනුව) ඉදිකිරීම්කරු පළමුව කැඳවා FooBuilder()වටිනාකමක් ලබා දෙන බැවින්, මෙයින් අදහස් .setA("a"):කරන්නේ ඇමතීමට අවස්ථාවක් නොලැබෙනවාද?
සෙලරිටාස්

3
E සෙලරිටාස් return thisවිසින් ක්‍රමය හැඳින්වූ වස්තුවම නැවත ලබා දෙයි (උදාහරණයේදී FooBuilder). එකම වස්තුවක් මත ක්‍රියා කරන එක් ප්‍රකාශයක ක්‍රම දම්වැල් දැමීමට මෙය ඉඩ දෙයි: new FooBuilder().setA(..).setB(..).setC(..)යනාදිය එක් එක් ක්‍රමය වෙනම ප්‍රකාශයකින් ඇමතීමට වඩා වෙනස් ය.
ADTC

2
E සෙලරිටාස් විසින් ක්‍රමය හැඳින්වෙන වස්තුවක් new FooBuilder()ආපසු ලබා දේ . නොකියන පරිදි , පෙරනිමි අගය රඳවා ගනී. අවසාන වශයෙන් මෙම වස්තුව මත ක්රමය කැඳවනු ලැබේ . මෙම ක්‍රමය විචල්‍යයට සකසා ඇති වස්තුවක් නිර්මාණය කර ආපසු ලබා දෙයි . වස්තුව කිසිදු විචල්‍යයක ගබඩා නොවන බව සැලකිල්ලට ගන්න . FooBuildersetAsetBthis.bbuildFooBuilderbuildFooFoo fooFooBuilder
ADTC

පෙරනිමි පරාමිතීන් නිර්මාණය කිරීම සඳහා විවරණ භාවිතා කළ හැකි අතර බහුමාමක එකතු කිරීම සඳහා අවශ්‍ය වූ විට වඩාත් ප්‍රයෝජනවත් වේ. docs.oracle.com/javase/tutorial/java/annotations/declaring.html
මාටින් ස්පමර්

1
ප්රශ්න දෙකක් හරහා එකම පිළිතුරක් මත උඩුකුරු 900 කට වඩා. මට පුදුමයි: stackoverflow.com/questions/965690/java-optional-parameters/…
AdamMc331

259

කනගාටුවට කරුණක් නම් නැත.


34
එය එතරම් කණගාටුදායකද? එසේ කිරීමෙන් අපැහැදිලි ක්‍රියාකාරී අත්සන් හඳුන්වා දෙනු ඇත.
ට්‍රේ

69
ReTrey: පෙරනිමි පරාමිතීන් සහිත භාෂාවන් බොහෝ විට ක්‍රියාකාරී බර පැටවීම අඩු කරයි. එබැවින් අවිනිශ්චිතතාවයක් නොමැත. ඊට අමතරව, ස්කලා විසින් 2.8 හි විශේෂාංගය එකතු කරන ලද අතර කෙසේ හෝ අපැහැදිලි ගැටළුව විසඳීය (අනුකූලතා හේතූන් මත ඔවුන් අධික ලෙස පැටවීම තබා ඇති බැවින්).
ෆිල්හෝ

32
පරාමිති පෙරනිමි මඟින් ක්‍රියාකාරී අධි බර පැටවීම වළක්වන්නේ කෙසේදැයි බැලීමට මා අසමත් විය. C # උදාහරණයක් ලෙස අභිබවා යාමට ඉඩ දෙන අතර පෙරනිමි ආරම්භ කිරීමටද ඉඩ දෙයි. අත්තනෝමතික තේරීමක් සේ පෙනේ, සීමා කිරීම නොවේ.
ෆ්ලේවර්ස්කේප්

53
ඔව්, සම්පාදකයාට අමතර වැඩක් කිරීමට ඉඩ නොදී වෙළඳාමට ඉඩ දී ඒ වෙනුවට අපගේ පුස්තකාල පරිශීලකයින්ට පහසුවක් ලබා දීම සඳහා 100000 අධික බරක් ලිවීමට සලස්වන්න. හොඳ අදහස.

28
@ user562566: මම ජාවා ව්‍යාපෘතියක වැඩ කරන සෑම විටම, ජාවා ඩෙව්ස් ගෙවනු ලබන්නේ / මනිනු ලබන්නේ ඔවුන් දිනකට කේත පේළි කීයක් නිෂ්පාදනය කරනවාද යන්න මතය
මාර්ක් කේ කෝවන්

84

අවාසනාවට ඔව්.

void MyParameterizedFunction(String param1, int param2, bool param3=false) {}

ජාවා 1.5 හි මෙසේ ලිවිය හැකිය:

void MyParameterizedFunction(String param1, int param2, Boolean... params) {
    assert params.length <= 1;
    bool param3 = params.length > 0 ? params[0].booleanValue() : false;
}

නමුත් ඔබ ජනනය කරන සම්පාදකයා ගැන ඔබට හැඟෙන ආකාරය මත රඳා පැවතිය යුතුද නැද්ද යන්න

new Boolean[]{}

එක් එක් ඇමතුම සඳහා.

පෙරනිමි බහු පරාමිතීන් සඳහා:

void MyParameterizedFunction(String param1, int param2, bool param3=false, int param4=42) {}

ජාවා 1.5 හි මෙසේ ලිවිය හැකිය:

void MyParameterizedFunction(String param1, int param2, Object... p) {
    int l = p.length;
    assert l <= 2;
    assert l < 1 || Boolean.class.isInstance(p[0]);
    assert l < 2 || Integer.class.isInstance(p[1]);
    bool param3 = l > 0 && p[0] != null ? ((Boolean)p[0]).booleanValue() : false;
    int param4 = l > 1 && p[1] != null ? ((Integer)p[1]).intValue() : 42;
}

මෙය C ++ සින්ටැක්ස් සමඟ ගැලපේ, එය පරාමිති ලැයිස්තුව අවසානයේ පෙරනිමි පරාමිතීන්ට පමණක් ඉඩ දෙයි.

වාක්‍ය ඛණ්ඩයෙන් ඔබ්බට, සම්මත සම්මත පරාමිතීන් සඳහා කාල වේලාව පිරික්සීමේ වෙනසක් ඇති අතර, සම්පාදනය කිරීමේදී C ++ වර්ගය ඒවා පරීක්ෂා කරයි.


14
දක්ෂ, නමුත් වරග්ස් (...) භාවිතා කළ හැක්කේ අවසාන පරාමිතිය සඳහා පමණි, එය පෙරනිමි පරාමිතීන් සඳහා සහය දක්වන භාෂා වලට වඩා සීමා කරයි.
CurtainDog

6
සී ++ අනුවාදයට සාපේක්ෂව එය දක්ෂ නමුත් ටිකක් අවුල් සහගතයි
කවුරුහරි කොහේ හරි

5
ජාවාට අනිවාර්යයෙන්ම C # සහ වෙනත් අය ඉඩ දෙන පරිදි විකල්ප පෙරනිමි පරාමිතීන් අවශ්‍ය වේ ... සින්ටැක්ස් පැහැදිලිය. හැකි සෑම සංයෝජනයක්ම සම්පාදනය කිරීමෙන් පවා මෙය සාධාරණ ලෙස ක්‍රියාත්මක කළ හැකි යැයි මම සිතමි ... ඔවුන් එය භාෂාවට එකතු නොකළේ මන්දැයි මට සිතාගත නොහැකිය තවම!
jwl

10
කිසිවෙකු කිසි විටෙක assertනිෂ්පාදන කේතයක් භාවිතා නොකළ යුතුය . ව්යතිරේකයක් විසි කරන්න.
මයිකල් ඩෝර්ස්ට්

5
-1 මෙය සැබවින්ම වර්‍ග සඳහා නොවේ. මෙය කඩුල්ලක්. - මේ අවස්ථාවේ දී, වැඩිපුර පැටවීම භාවිතා කිරීම වඩා කියවිය හැකි වනු ඇත (එය අවාසනාවකි, අමතර අක්ෂර තුනක් අමතර මූලාශ්‍ර පේළි 5 කට වඩා කියවිය හැකි බැවින් ...). - නමුත් ජාවා පෙරනිමි පරාමිතීන් සඳහා සහය නොදක්වයි.
BrainSlugs83

38

නැත, නමුත් ඔබට ඒවා ඉතා පහසුවෙන් අනුකරණය කළ හැකිය. C ++ හි ඇති දේ:

public: void myFunction(int a, int b=5, string c="test") { ... }

ජාවා හි, එය අධික ලෙස පටවන ලද ශ්‍රිතයක් වනු ඇත:

public void myFunction(int a, int b, string c) { ... }

public void myFunction(int a, int b) {
    myFunction(a, b, "test");
}

public void myFunction(int a) {
    myFunction(a, 5);
}

පෙර සඳහන් කළ පරිදි, පෙරනිමි පරාමිතීන් මඟින් ක්‍රියාකාරී අධි බර පැටවීමේදී නොපැහැදිලි අවස්ථා ඇති විය. එය සරලවම සත්‍ය නොවේ, C ++ සම්බන්ධයෙන් අපට දැකිය හැකිය: ඔව්, සමහර විට එය නොපැහැදිලි අවස්ථා නිර්මාණය කළ හැකි නමුත් මෙම ගැටළුව පහසුවෙන් විසඳා ගත හැකිය. එය හුදෙක් ජාවා හි සංවර්ධනය කර නැත, බොහෝ විට නිර්මාණකරුවන්ට C ++ තරම් සරල භාෂාවක් අවශ්‍ය වූ නිසා විය හැකිය - ඔවුන්ට නිවැරදි නම් තවත් ප්‍රශ්නයකි. නමුත් අප බොහෝ දෙනා සිතන්නේ ඔහු ජාවා භාවිතා කරන්නේ එහි සරල බව නිසා බවයි.


8
C # පෙරනිමි අගය අංකනය කිරීමේ ප්‍රධාන අදහස හරියටම මෙම බොයිලේරු කේතීකරණයෙන් වැළකී සිටීම සහ බොහෝ ඒවා වෙනුවට එක් ඉදිකිරීම්කරුවෙකු පමණක් සිටීමයි.
කෝල්යා ඉවාන්කොව්

1
@ කොලියා ඉවාන්කොව් මම සී # දන්නේ නැහැ, නමුත් මම දන්නවා C ++ තර්කය එක සමානයි. වඩා හොඳ කුමක්දැයි මම නොදනිමි, නමුත් මම සිතන්නේ, ඇත්ත වශයෙන්ම එකම බොයිලේරු කේතය C ++ / C # හි සම්පාදකයා විසින් ජනනය කරන අතර එය අවසාන ද්විමය වෙත යයි.
පීටර් - මොනිකා නැවත ස්ථාපනය කරන්න

5
සෑම ක්‍රමලේඛන භාෂාවක්ම (විශේෂයෙන්) එකලස් කිරීමේ බොයිලේරු වළක්වා ගැනීම සඳහා වූ මාධ්‍යයකි, මම වැරදිද? ප්‍රශ්නය වන්නේ එය පහසු ක්‍රියාකාරීත්වයක් ලබා දෙන්නේද නැද්ද යන්නයි.
කෝල්යා ඉවාන්කොව්

2
පළමු වාක්‍යය වාචාල ප්‍රශ්නයකි. දෙවන වාක්‍යයේ “ප්‍රශ්නය” යන වචනයට පළමු වාක්‍ය ඛණ්ඩය හා කිසිදු සම්බන්ධයක් නැත.
කෝල්යා ඉවාන්කොව්

1
වඩාත් නිශ්චිත වීම: භාෂා යනු අපට ලියා ඇති දේ පාලනය කිරීමට හැකි අයුරින් වැඩසටහන් ලිවීමට අපට ඉඩ සලසන මෙවලම් වේ, සම්පාදනය යනු යන්ත්‍රයකින් අපට අවශ්‍ය දේ පැවසීමට ක්‍රමයකි. බොයිලර් තහඩුව මග හැරීමට අපට ඉඩ දෙන්නේ නම් මෙවලමක් වඩාත් ප්‍රයෝජනවත් වේ. ඇත්ත වශයෙන්ම, සී # එයට ඉඩ දෙන බැවින්, පිළිතුරක් ලෙස ඔබ යෝජනා කරන බොයිලර් ප්ලේට් කේතය හරියටම වළක්වා ගත හැකිදැයි n ානවි ඇසීය.
කෝල්යා ඉවාන්කොව්

24

ඔබට මෙය කළ හැක්කේ JVM මත ධාවනය වන ජාවා වැඩසටහන් සමඟ අනුකූල වන Scala හි ය. http://www.scala-lang.org/

එනම්

class Foo(var prime: Boolean = false, val rib: String)  {}

58
එතරම් පොදු නොවන අංගයක් ලබා ගැනීම සඳහා නව භාෂාව ගෙන එන්න?
om-nom-nom

8
om om-nom-nom: ජාවා කිසි විටෙකත් නොතිබිය යුතුය. විශේෂාංගයක් භාවිතා නොකරන බව පැවසීම කිසිවෙකුට අවශ්‍ය නොවන බව පැවසීම ජාවා එය සොයා ගැනීමට පෙර ජනප්‍රිය නොවූ බව කියන්නේ ගෝස්ලිං එය සැලසුම් කිරීම ආරම්භ නොකළ යුතු බවයි.
Val

28
Al වල් කියන්නේ මෙය කැනන් වලින් කුරුල්ලන්ට වෙඩි තැබීම හා සමානයි කියායි
om-nom-nom

8
OP හි ප්‍රශ්නයට එයට කිසිදු සම්බන්ධයක් නැත
destan

කොට්ලින්හි ද වැඩ කරයි. සහ ග්‍රෝවි. සහ සී #. සහ ජාවාස්ක්‍රිප්ට්. සැබෑ මිනිසුන් සහ ගැටලු සඳහා සාදන ලද අනෙකුත් සියලුම භාෂා පාහේ.
spyro

17

නැත , නමුත් මෙය ක්‍රියාත්මක කිරීමට ඇති සරලම ක්‍රමය නම්:

public myParameterizedFunction(String param1, int param2, Boolean param3) {

    param3 = param3 == null ? false : param3;
}

public myParameterizedFunction(String param1, int param2) {

    this(param1, param2, false);
}

හෝ ත්‍රිමාණ ක්‍රියාකරු වෙනුවට , ඔබට මෙය භාවිතා කළ හැකිය if:

public myParameterizedFunction(String param1, int param2, Boolean param3) {

    if (param3 == null) {
        param3 = false;
    }
}

public myParameterizedFunction(String param1, int param2) {

    this(param1, param2, false);
}

2
ඔව්, මෙම ප්‍රවේශය අනෙක් විකල්ප වලින් හොඳම බව පෙනේ. තවමත් ජාවා පෙරනිමි අගයන් අනුගමනය කිරීම සතුටක් වනු ඇත; මෙය කළ හැකි බව කෝට්ලින් පෙන්වා දුන් අතර, ඔරකල් නූතන යුගයට ඇතුල් නොවන්නේ මන්දැයි මට විශ්වාස නැත, එසේම 1990 දශකයේ මෙන් ජාවා නිර්මාණය කිරීම දිගටම කරගෙන යයි. : ඩී
ෂෙවි

15

මම මෙහි පැහැදිලිව සඳහන් කළත් “පෙරනිමි” පරාමිතිය ඔබම ක්‍රියාත්මක නොකරන්නේ ඇයි?

public class Foo() {
        public void func(String s){
                func(s, true);
        }
        public void func(String s, boolean b){
                //your code here
        }
}

පෙරනිමිය සඳහා, ඔබ භාවිතා කරනු ඇත

func("my string");

ඔබ පෙරනිමිය භාවිතා කිරීමට අකමැති නම්, ඔබ භාවිතා කරනු ඇත

func("my string", false);

11
පෝස්ටරය ඇසුවේ මෙම (තරමක් අවලස්සන) රටාව වළක්වා ගත හැකිද යන්නයි ... ;-) වඩාත් නවීන භාෂාවලින් (c #, Scala වැනි) ඔබට මෙම අමතර බර පැටවීම අවශ්‍ය නොවන අතර එමඟින් වැඩි කේත රේඛා පමණක් නිර්මාණය වේ. යම් වේලාවක් දක්වා ඔබට මේ අතරතුර වර්‍ග භාවිතා කළ හැකිය (ස්ථිතික int max (int ... array) {}), නමුත් ඒවා ඉතා කැත වැඩකි.
Offler

2
අධි බර පැටවීම අවලස්සන නොවන අතර විවිධ අත්සන සහිත විවිධ ක්‍රම ඇමතුම් වැනි විවිධ ප්‍රතිලාභ ඇත. //This is better public class Foo() { /* This does something */ public void func(String s){ //do something } /* This does something else with b */ public void func(String s, boolean b){ // b was passed } } //Than this public class Foo() { /* This does something unless b = value, then it does something else */ public void func(String s, boolean b = value){ If (b){ // Do Something } else{ // Do something else } } }
ඇන්ටනි බූත්

හොඳයි, යමෙකුට වෙනස් හැසිරීමක් අවශ්‍ය නම්. එකම වෙනස වන්නේ ගණනය කිරීම් ආදියෙහි සුළු වෙනසක් නම්, බහු අත්සන් නිර්මාණය කිරීම සඳහා දරන උත්සාහය නාස්තියක් බව සහතිකයි. පෙරනිමි මඟින් ඔබට ඒවා අවශ්‍ය තැන අර්ථවත් කරයි ... සහ එය නොමැතිකම "නිෂ් less ල" අවශ්‍යතාවයක් ලෙස වර්ගීකරණය නොකළ යුතුය.
කපිල්

Ff ඕෆ්ලර් පෙරනිමි පරාමිතීන්ට “නූතන භාෂාව” සමඟ කිසිදු සම්බන්ධයක් නැත. මම මීට වසර 20 කට පෙර ඩෙල්ෆි හි භාවිතා කළ අතර ඒවා දැනටමත් ටර්බෝ පැස්කල්හි පැවතුනි.
ඇදහිය නොහැකි ජනවාරි

මම ඕෆ්ලර් සමඟ එකඟ වන අතර ඇන්ටනි බූත් සමඟ එකඟ නොවෙමි. එය කැත පමණක් නොව තරමක් අකාර්යක්ෂම බව මට පෙනේ. රූබි හෝ පයිතන් වැනි භාෂා පෙරනිමි පරාමිතීන් භාවිතා කිරීම සුළුපටු කරයි; මම අනුමාන කරන්නේ ජාවා ඔබට කළ යුත්තේ වැඩකරන සොයා ගැනීම (සහ භාවිතා කිරීම) බවයි. පැහැදිළි චෙක්පත එදිරිව අවම අවලස්සන තේරීමක් ලෙස පෙනේ, මන්ද මම එය විධාන රේඛාවෙන් ද ඇමතිය හැකිය (කිසිවක් සපයන්නේ නැත, පසුව විචක්ෂණ ප්‍රභේදය හසුරුවන්න); ක්‍රියාකරු අධි බර පැටවීමේ ප්‍රවේශය පෙනේ ... ඉතා වාචික (ශුන්‍ය චෙක්පත හා සසඳන විට අවම වශයෙන් +3 පේළි වැනි, සහ කේතය වඩාත් සංකීර්ණ නම් තවත් පේළි).
ෂෙවි

8

ස්කලා සඳහන් කළ පරිදි, කොට්ලින් ද සඳහන් කිරීම වටී. කොට්ලින් හි ක්‍රියාකාරී පරාමිතීන්ට පෙරනිමි අගයන් ද තිබිය හැකි අතර ඒවාට වෙනත් පරාමිතීන් වෙත යොමු විය හැකිය:

fun read(b: Array<Byte>, off: Int = 0, len: Int = b.size) {
    ...
}

ස්කලා මෙන්, කෝට්ලින් ජේවීඑම් මත ධාවනය වන අතර පවතින ජාවා ව්‍යාපෘති සමඟ පහසුවෙන් ඒකාබද්ධ කළ හැකිය.


8

භාවිතා කරනවා වෙනුවට:

void parameterizedMethod(String param1, int param2) {
    this(param1, param2, false);
}

void parameterizedMethod(String param1, int param2, boolean param3) {
    //use all three parameters here
}

තනි ක්‍රමයක් තිබීමෙන් ඔබට ජාවා හි විකල්ප ක්‍රියාකාරිත්වය භාවිතා කළ හැකිය:

void parameterizedMethod(String param1, int param2, @Nullable Boolean param3) {
    param3 = Optional.ofNullable(param3).orElse(false);
    //use all three parameters here
}

ප්රධාන වෙනස නම් nullආදානය සඳහා ඉඩ දීම සඳහා ප්රාථමික ජාවා වර්ග වෙනුවට එතීමේ පන්ති භාවිතා කිරීමයි . Booleanඒ වෙනුවට boolean, Integerඒ වෙනුවට intසහ එසේ ය.


6

සාමාන්‍යයෙන් ජාවාහි සරල භාෂාවක් සෑදීමට උත්සාහ කළ බැවින් සින්ටැක්ටික් සීනි වැඩි ප්‍රමාණයක් නොමැත.


26
තරමක් නොවේ. කටුක සත්‍යය නම් කණ්ඩායම දැඩි කාලසටහනකට අනුව සිටි අතර සින්ටැක්ටික් සීනි සඳහා කාලයක් නොමැති බවය. වෙන ඇයි ඇත constහා gotoනැත ක්රියාත්මක වන ප්රධාන වචන වෙන් කළ හැකිද? - විශේෂයෙන් constමට තිත්ත ලෙස මග හැරුණු දෙයක් - finalආදේශ කිරීමක් නොවන අතර ඔවුන් එය දැන සිටියහ. - ඔබ කිසි විටෙකත් ක්‍රියාත්මක නොකිරීමට සවි decision ානිකව තීරණයක් ගත්තා නම් ඔබට gotoමූලික පදය වෙන් කර ගැනීමට අවශ්‍ය නොවේ. - ඒ වගේම පසුව ජාවා කණ්ඩායම ලේබලය පදනම් කරමින් සත්ය තත්වය breakහා continueඑය පැස්කල් තරම් බලවත් goto.
මාටින්

"සරල, වස්තු-නැඹුරු සහ හුරුපුරුදු" සැබවින්ම නිර්මාණ ඉලක්කයක් විය - oracle.com/technetwork/java/intro-141325.html
මිකෙරා

1
ටොම්ජන් මෙසේ පැවසීය: "නැත. සාමාන්‍යයෙන් ජාවාහි සින්ටැක්ටික් සීනි වැඩි ප්‍රමාණයක් නොමැත, මන්ද ඔවුන් සරල භාෂාවක් සෑදීමට උත්සාහ කළ බැවිනි". ඉතින් ඔබ කියන්නේ C ++ වෙතින් අනවශ්‍ය අංග රාශියක් ඉවත් කිරීම ජාවා සරල භාෂාවක් බවට පත් කරන බවයි, එසේනම් මට කියන්න ජාවාහි විචල්‍ය ක්‍රම ඇත්තේ ඇයි? එයට වර්‍ග ඇත්තේ ඇයි? ඔබට ඒ වෙනුවට වස්තු සමූහයක් භාවිතා කළ හැකි නම් එය අවශ්‍ය නොවේ, මම හරිද? එබැවින් වර්‍ගයන් භාෂාවෙන් ඉවත් කළ හැකිය, මන්ද එය අනවශ්‍යය. මෙය ජාවා දැන් පවතින තත්වයට වඩා සරල කරයි. මම හරිද? එක් එක් ක්‍රමයට ඔබට අනන්ත නම් ඇති බැවින්, අධික ලෙස පැටවීමද ඉවත් කළ හැකිය.

1
සරල භාෂාව ගෙන ඕනෑම සැබෑ ජාවා ව්‍යාපෘතියක් සින්ටැක්ස් සහ බොයිලර් ප්ලේට්
පොකුරක්

බොයිලර් ප්ලේට් කේතයට සහ සංකීර්ණ ක්‍රියාකාරීත්වයට ඩෙව්ස්ට බල කිරීම "පහසු" යන වචනය පිළිබඳ මගේ අවබෝධය නොවේ. myFunction (a, b = false, c = 3), එය මම පහසු යැයි කියමි.
spyro

6

නැත.

ස්මාර්ට් පෙරනිමි සහිත වස්තුවක් සම්මත කිරීමෙන් ඔබට එකම හැසිරීම සාක්ෂාත් කරගත හැකිය. නමුත් නැවතත් එය රඳා පවතින්නේ ඔබේ නඩුව කුමක්ද යන්නයි.


4

එයට සහය නොදක්වන නමුත් සමහර සින්ටැක්ස් සීනි සමඟ පරාමිති වස්තු රටාව භාවිතා කිරීම වැනි විකල්ප කිහිපයක් තිබේ:

public class Foo() {
    private static class ParameterObject {
        int param1 = 1;
        String param2 = "";
    }

    public static void main(String[] args) {
        new Foo().myMethod(new ParameterObject() {{ param1 = 10; param2 = "bar";}});
    }

    private void myMethod(ParameterObject po) {
    }
}

මෙම නියැදියේදී අපි ParameterObjectපෙරනිමි අගයන් සමඟ ගොඩනඟා ඒවා පන්ති නිදර්ශන ආරම්භක කොටසේ අභිබවා යන්නෙමු{ param1 = 10; param2 = "bar";}


3

මෙම විසඳුම උත්සාහ කරන්න:

public int getScore(int score, Integer... bonus)
{
    if(bonus.length > 0)
    {
        return score + bonus[0];
    }

    return score;
}

3

පෙරනිමි අගයන් සහිත තනන්නා ස්වයංක්‍රීයව ජනනය කිරීමට ඔබට ජාවා ක්‍රම ආයාචනා තනන්නා භාවිතා කළ හැකිය .

පංතියට හෝ අතුරු මුහුණතට @GenerateMethodInvocationBuilder සහ පෙරනිමි අගයන් ඔබට අවශ්‍ය ක්‍රමවේදයන්හි පරාමිතීන් වෙත efDefault එක් කරන්න. ඔබේ ව්‍යාඛ්‍යාව සමඟ ඔබ නියම කළ පෙරනිමි අගයන් භාවිතා කරමින් සම්පාදක වේලාවේදී තනන්නෙකු ජනනය වේ.

@GenerateMethodInvocationBuilder
public class CarService {
 public CarService() {
 }

 public String getCarsByFilter(//
   @Default("Color.BLUE") Color color, //
   @Default("new ProductionYear(2001)") ProductionYear productionYear,//
   @Default("Tomas") String owner//
 ) {
  return "Filtering... " + color + productionYear + owner;
 }
}

එවිට ඔබට ක්රම භාවිතා කළ හැකිය.

CarService instance = new CarService();
String carsByFilter = CarServiceGetCarsByFilterBuilder.getCarsByFilter()//
  .invoke(instance);

නැතහොත් පෙරනිමි අගයන් වෙනත් දෙයකට සකසන්න.

CarService instance = new CarService();
String carsByFilter = CarServiceGetCarsByFilterBuilder.getCarsByFilter()//
  .withColor(Color.YELLOW)//
  .invoke(instance);

2

ජාවා 8 හි ක්‍රියාත්මක වන https://stackoverflow.com/a/13864910/2323964 ට සමාන ප්‍රවේශයක් වන්නේ පෙරනිමි ලබා ගන්නන් සමඟ අතුරු මුහුණතක් භාවිතා කිරීමයි. මෙය වඩාත් හිස් අවකාශයේ වාචික වනු ඇත, නමුත් සමච්චල් කළ හැකි අතර, ඔබට පරාමිතීන් කෙරෙහි සැබවින්ම අවධානය යොමු කිරීමට අවශ්‍ය අවස්ථා සමූහයක් ඇති විට එය විශිෂ්ටයි.

public class Foo() {
    public interface Parameters {
        String getRequired();
        default int getOptionalInt(){ return 23; }
        default String getOptionalString(){ return "Skidoo"; }
    }

    public Foo(Parameters parameters){
        //...
    }

    public static void baz() {
        final Foo foo = new Foo(new Person() {
            @Override public String getRequired(){ return "blahblahblah"; }
            @Override public int getOptionalInt(){ return 43; }
        });
    }
}

2

අගයන් ආපසු ලබා දෙන ක්‍රම සමඟ මෙය භාවිතා කරන්නේ කෙසේදැයි සොයා බැලීමට මම දැන් සෑහෙන කාලයක් ගත කර ඇති අතර, මම මෙතෙක් කිසිදු උදාහරණ දැක නැත, මෙය මෙහි එකතු කිරීම ප්‍රයෝජනවත් යැයි මම සිතුවෙමි:

int foo(int a) {
    // do something with a
    return a;
}

int foo() {
    return foo(0); // here, 0 is a default value for a
}


1

මම එය කළ ආකාරය මෙයයි ... ඔබේ නිර්වචනය කළ පරාමිතියට එරෙහිව 'විකල්ප තර්කයක්' තිබීම එතරම් පහසු නැත, නමුත් එය කාර්යය ඉටු කරයි:

public void postUserMessage(String s,boolean wipeClean)
{
    if(wipeClean)
    {
        userInformation.setText(s + "\n");
    }
    else
    {
        postUserMessage(s);
    }
}

public void postUserMessage(String s)
{
    userInformation.appendText(s + "\n");
}

මට එකම ක්‍රමයේ නම නූලකින් ආයාචනා කළ හැකි බව සලකන්න. නැතහොත් මට එය නූල් සහ බූලියන් අගයකින් ආයාචනා කළ හැකිය. මෙම අවස්ථාවෙහිදී, wipeClean සත්‍ය ලෙස සැකසීම මගේ TextArea හි ඇති සියලුම පා provided යන් සපයා ඇති නූල් සමඟ ප්‍රතිස්ථාපනය කරයි. වයිප් ක්ලීන් අසත්‍ය ලෙස සැකසීම හෝ ඒ සියල්ල එකට තැබීම මඟින් සපයා ඇති පා Text ය පෙළ පෙළට එකතු කරයි.

මම ක්‍රම දෙකෙහි කේතය පුනරාවර්තනය නොකරන බව සලකන්න, මම හුදෙක් ටෙක්ස්ට්ආරියාව නැවත සැකසීමේ ක්‍රියාකාරීත්වය එක් කරන්නේ එකම නමකින් නව ක්‍රමයක් නිර්මාණය කිරීමෙන් එකතු කළ බූලියන් සමඟ පමණි.

අපගේ පරාමිතීන් සඳහා ජාවා විසින් 'විකල්ප තර්කයක්' ලබා දුන්නේ නම් පෙරනිමි අගයන් සඳහා කේත කිරීමට අවශ්‍ය බැවින් මෙය ටිකක් පිරිසිදු යැයි මම සිතමි. මෙම උදාහරණයේ දී, මම ඒ කිසිවක් ගැන කරදර විය යුතු නැත. ඔව්, මම මගේ පන්තියට තවත් ක්‍රමයක් එකතු කර ඇත්තෙමි, නමුත් මගේ නිහතමානී මතය අනුව දිගුකාලීනව කියවීම පහසුය.


1

නැත, නමුත් ශ්‍රිත අධි බර පැටවීමේ ස්වරූපයෙන් අපට විකල්පයක් ඇත.

කිසිදු පරාමිතියක් සම්මත නොවූ විට කැඳවනු ලැබේ

void operation(){

int a = 0;
int b = 0;

} 

"a" පරාමිතියක් සම්මත වූ විට එය කැඳවනු ලැබේ

void operation(int a){

int b = 0;
//code

} 

b පරාමිතිය සම්මත වූ විට කැඳවනු ලැබේ

void operation(int a , int b){
//code
} 

1

මේ වගේ දුසිම් භාගයක් හෝ ඊට වඩා හොඳ ගැටළු තිබේ, අවසානයේදී ඔබ ස්ථිතික කර්මාන්තශාලා රටාවට පැමිණේ ... ඒ සඳහා ක්‍රිප්ටෝ ඒපීඅයි බලන්න. පැහැදිලි කිරීමට අපහසු, නමුත් මේ ආකාරයෙන් සිතන්න: ඔබට ඉදිකිරීම්කරුවෙකු සිටී නම්, පෙරනිමිය හෝ වෙනත් ආකාරයකින්, වක්‍ර වරහන් වලින් ඔබ්බට රාජ්‍ය ප්‍රචාරණය කළ හැකි එකම ක්‍රමය වන්නේ එක්කෝ බූලියන් isValid ය; (ශුන්‍යය පෙරනිමි අගය ලෙස v අසමත් වූ ඉදිකිරීම්කරු සමඟ) හෝ ක්ෂේත්‍ර පරිශීලකයින්ගෙන් එය නැවත ලබා ගැනීමේදී කිසි විටෙකත් තොරතුරු නොදක්වන ව්‍යතිරේකයක් විසි කරන්න.

කේතය නිවැරදියි, මම පේළි සාදන්නන් දහසක් ලියා මට අවශ්‍ය දේ කරන්නෙමි. වස්තු ඉදිකිරීමේදී isValid භාවිතා කිරීම මට පෙනේ - වෙනත් වචන වලින් කිවහොත්, පේළි දෙකක ඉදිකිරීම්කරුවන් - නමුත් කිසියම් හේතුවක් නිසා මම ස්ථිතික කර්මාන්තශාලා රටාවට සංක්‍රමණය වෙමි. ක්‍රමවේදය ඇමතුමක දී ඔබට තවමත් බොහෝ දේ කළ හැකි බව මට පෙනේ, සමමුහුර්ත () ගැටළු තවමත් පවතින නමුත් පෙරනිමි 'ආදේශක' වඩා හොඳ (ආරක්ෂිත)

මම හිතන්නේ අප මෙහි කළ යුත්තේ ශුන්‍ය ප්‍රශ්නය පෙරනිමි අගය ලෙස සලකන දෙයක් ලෙසට ය. සාමාජික විචල්‍යයක් ලෙස, පසුව ඉදිකිරීම්කරුට සම්මත නූලක් පැවරීමට පෙර ශුන්‍යය පරීක්ෂා කරන්න.

ජාවා හි සිදු කරන ලද අමු, ආන්තික ගෝලාකාර පරිගණක විද්‍යාවේ ප්‍රමාණය ඉතා විශිෂ්ටයි.

C ++ සහ යනාදිය සඳහා විකුණුම්කරුගේ ලිබ් ඇත, ඔව්. විශාල මෙවලම් පෙට්ටියක් නිසා ජාවාට ඒවා මහා පරිමාණ සේවාදායකයන් අභිබවා යා හැකිය. ස්ථිතික ආරම්භක කුට්ටි අධ්‍යයනය කරන්න, අප සමඟ සිටින්න.


0

ඔබට පහත සඳහන් දෑ භාවිතා කළ හැකිය

public void mop(Integer x) {
  // Define default values
        x = x == null ? 200 : x;
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.