Skip to main content

Java optional parameters



How do I use optional parameters in Java? What specification supports optional parameters?




Comments

  1. varargs could do that (in a way). Other than that, all variables in the declaration of the method must be supplied. If you want a variable to be optional, you can overload the method using a signature which doesn't require the parameter.

    private boolean defaultOptionalFlagValue = true;

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

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

    ReplyDelete
  2. You can use something like this:

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


    The params variable is optional. It is treated as a nullable array of Objects.

    Strangely, I couldn't find anything about this in the documentation, but it works!

    This is "new" in Java 1.5 and beyond (not supported in Java 1.4 or earlier).

    I see user bhoot mentioned this too below.

    ReplyDelete
  3. Unfortunately Java doesn't support default parameters directly.

    However, I've written a set of JavaBean annotations, and one of them support default parameters like the following:

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


    The annotation processor generates the method overloads to properly support this.

    See http://code.google.com/p/javadude/wiki/Annotations

    Full example at http://code.google.com/p/javadude/wiki/AnnotationsDefaultParametersExample

    ReplyDelete
  4. There are no optional parameters in Java. What you can do is overloading the functions and then passing default values.

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

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

    ReplyDelete
  5. VarArgs and overloading have been mentioned. Another option is a Builder pattern, which would look something like this:

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


    Although that pattern would be most appropriate for when you need optional parameters in a constructor.

    ReplyDelete
  6. There is optional parameters with Java 1.5 onwards I think. Just declare your function like this:

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

    you could call with doSomething() or doSomething(true) now.

    ReplyDelete
  7. It would depends on what you want to achieve, varargs or method overloading should solve most scenarios.
    Here some nice examples of how to use them:

    http://blog.sleekface.com/in/java-core/method-with-optional-parameters/

    but keep in mind not to over use method overloading. it brings confusion.

    ReplyDelete

Post a Comment

Popular posts from this blog

Why is this Javascript much *slower* than its jQuery equivalent?

I have a HTML list of about 500 items and a "filter" box above it. I started by using jQuery to filter the list when I typed a letter (timing code added later): $('#filter').keyup( function() { var jqStart = (new Date).getTime(); var search = $(this).val().toLowerCase(); var $list = $('ul.ablist > li'); $list.each( function() { if ( $(this).text().toLowerCase().indexOf(search) === -1 ) $(this).hide(); else $(this).show(); } ); console.log('Time: ' + ((new Date).getTime() - jqStart)); } ); However, there was a couple of seconds delay after typing each letter (particularly the first letter). So I thought it may be slightly quicker if I used plain Javascript (I read recently that jQuery's each function is particularly slow). Here's my JS equivalent: document.getElementById('filter').addEventListener( 'keyup', function () { var jsStart = (new Date).getTime()...

Is it possible to have IF statement in an Echo statement in PHP

Thanks in advance. I did look at the other questions/answers that were similar and didn't find exactly what I was looking for. I'm trying to do this, am I on the right path? echo " <div id='tabs-".$match."'> <textarea id='".$match."' name='".$match."'>". if ($COLUMN_NAME === $match) { echo $FIELD_WITH_COLUMN_NAME; } else { } ."</textarea> <script type='text/javascript'> CKEDITOR.replace( '".$match."' ); </script> </div>"; I am getting the following error message in the browser: Parse error: syntax error, unexpected T_IF Please let me know if this is the right way to go about nesting an IF statement inside an echo. Thank you.