https://hellosmallworld123.wordpress.com/2014/07/26/more-java-programming-questions/
http://javarevisited.blogspot.com/2013/03/how-to-create-immutable-class-object-java-example-tutorial.html
Immutable classes are those class, whose object can not be modified once created, it means any modification on immutable object will result in another immutable object.
1) Immutable objects are by default thread safe, can be shared without synchronization in concurrent environment.
2) Immutable object simplifies development, because its easier to share between multiple threads without external synchronization.
3) Immutable object boost performance of Java application by reducing synchronization in code.
4) Another important benefit of Immutable objects is reusability, you can cache Immutable object and reuse them, much like String literals and Integers. You can use static factory methods to provide methods like valueOf(), which can return an existing Immutable object from cache, instead of creating a new one.
Disadvantages:
immutable object has disadvantage of creating garbage as well. Since immutable object can not be reused and they are just a use and throw.
Java String, primitive wrapper are immutable.
String vs Stringbuilder
What is the difference between interface and abstract class
1. Main difference is methods of a Java interface are implicitly abstract and cannot have implementations. A Java abstract class can have instance methods that implements a default behavior.
2. Variables declared in a Java interface is by default final. An abstract class may contain non-final variables.
3. Members of a Java interface are public by default. A Java abstract class can have the usual flavors of class members like private, protected, etc..
4. Java interface should be implemented using keyword “implements”; A Java abstract class should be extended using keyword “extends”.
5. An interface can extend another Java interface only, an abstract class can extend another Java class and implement multiple Java interfaces.
A Java class can implement multiple interfaces but it can extend only one abstract class.
Interface is absolutely abstract and cannot be instantiated; A Java abstract class also cannot be instantiated, but can be invoked if a main() exists.
In comparison with java abstract classes, java interfaces are slow as it requires extra indirection.
Immutable class in Java2. Variables declared in a Java interface is by default final. An abstract class may contain non-final variables.
3. Members of a Java interface are public by default. A Java abstract class can have the usual flavors of class members like private, protected, etc..
4. Java interface should be implemented using keyword “implements”; A Java abstract class should be extended using keyword “extends”.
5. An interface can extend another Java interface only, an abstract class can extend another Java class and implement multiple Java interfaces.
A Java class can implement multiple interfaces but it can extend only one abstract class.
Interface is absolutely abstract and cannot be instantiated; A Java abstract class also cannot be instantiated, but can be invoked if a main() exists.
In comparison with java abstract classes, java interfaces are slow as it requires extra indirection.
http://javarevisited.blogspot.com/2013/03/how-to-create-immutable-class-object-java-example-tutorial.html
Immutable classes are those class, whose object can not be modified once created, it means any modification on immutable object will result in another immutable object.
1. State of immutable object can not be modified after construction, any modification should result in new immutable object.
2. All fields of Immutable class should be final.
3. Object must be properly constructed i.e. object reference must not leak during construction process.
4. Object should be final in order to restrict sub-class for altering immutability of parent class.
public final class ImmutableReminder{
private final Date remindingDate;
public Date getRemindingDate() {
return (Date) remindingDate.clone();
}
}
Benefits of Immutable Classes in Java1) Immutable objects are by default thread safe, can be shared without synchronization in concurrent environment.
2) Immutable object simplifies development, because its easier to share between multiple threads without external synchronization.
3) Immutable object boost performance of Java application by reducing synchronization in code.
4) Another important benefit of Immutable objects is reusability, you can cache Immutable object and reuse them, much like String literals and Integers. You can use static factory methods to provide methods like valueOf(), which can return an existing Immutable object from cache, instead of creating a new one.
Disadvantages:
immutable object has disadvantage of creating garbage as well. Since immutable object can not be reused and they are just a use and throw.
Java String, primitive wrapper are immutable.
String vs Stringbuilder
How to implement a immutable class in Java
What is an immutable object: The attribute of the object can only be set once, at the time when it is initialized, and can not be changed later
1. first remove all the setter method from the class.
2. set all member variables private and final so that they can not be modified or point to other objects.
3. Make all method final to make sure they can not be overridden. A simpler way is to make the class final, a more sophisticated way is to make the constructor private and produce new instance form a factory pattern.
4. If a member variable is an object, make sure its reference is not exposed to the outside (returned by a public function) so it can not be modified.
What is an immutable object: The attribute of the object can only be set once, at the time when it is initialized, and can not be changed later
1. first remove all the setter method from the class.
2. set all member variables private and final so that they can not be modified or point to other objects.
3. Make all method final to make sure they can not be overridden. A simpler way is to make the class final, a more sophisticated way is to make the constructor private and produce new instance form a factory pattern.
4. If a member variable is an object, make sure its reference is not exposed to the outside (returned by a public function) so it can not be modified.