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

[韓日関係] 首相含む大幅な内閣改造の可能性…早ければ来月10日ごろ=韓国

div not scrolling properly with slimScroll plugin

I am using the slimScroll plugin for jQuery by Piotr Rochala Which is a great plugin for nice scrollbars on most browsers but I am stuck because I am using it for a chat box and whenever the user appends new text to the boxit does scroll using the .scrollTop() method however the plugin's scrollbar doesnt scroll with it and when the user wants to look though the chat history it will start scrolling from near the top. I have made a quick demo of my situation http://jsfiddle.net/DY9CT/2/ Does anyone know how to solve this problem?

Why does this javascript based printing cause Safari to refresh the page?

The page I am working on has a javascript function executed to print parts of the page. For some reason, printing in Safari, causes the window to somehow update. I say somehow, because it does not really refresh as in reload the page, but rather it starts the "rendering" of the page from start, i.e. scroll to top, flash animations start from 0, and so forth. The effect is reproduced by this fiddle: http://jsfiddle.net/fYmnB/ Clicking the print button and finishing or cancelling a print in Safari causes the screen to "go white" for a sec, which in my real website manifests itself as something "like" a reload. While running print button with, let's say, Firefox, just opens and closes the print dialogue without affecting the fiddle page in any way. Is there something with my way of calling the browsers print method that causes this, or how can it be explained - and preferably, avoided? P.S.: On my real site the same occurs with Chrome. In the ex