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
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.
ReplyDeleteprivate boolean defaultOptionalFlagValue = true;
public void doSomething(boolean optionalFlag) {
...
}
public void doSomething() {
doSomething(defaultOptionalFlagValue);
}
You can use something like this:
ReplyDeletepublic 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.
Unfortunately Java doesn't support default parameters directly.
ReplyDeleteHowever, 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
There are no optional parameters in Java. What you can do is overloading the functions and then passing default values.
ReplyDeletevoid SomeMethod(int age, String name) {
//
}
// Overload
void SomeMethod(int age) {
SomeMethod(age, "John Doe");
}
VarArgs and overloading have been mentioned. Another option is a Builder pattern, which would look something like this:
ReplyDeleteMyObject 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.
There is optional parameters with Java 1.5 onwards I think. Just declare your function like this:
ReplyDeletepublic void doSomething(boolean...optionalFlag) {
...
}
you could call with doSomething() or doSomething(true) now.
It would depends on what you want to achieve, varargs or method overloading should solve most scenarios.
ReplyDeleteHere 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.