Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Any real time example for transient variable in java

From the question Why does Java have transient fields?. I am able to understand the transient. But, not able to evaluate to using transient keyword at the time of designing.

public class A implements Serializable 
{
    public String s;
    public transient ts; 
}

If i do the same thing in alternative way..

public class A implements Serializable 
{
    public String s;
    //public transient ts;//removing this variable.

} 

And use another class and define method inside the class and define the variable ts and do the operation and persist the value of s as business defines.

QUESTION

I didn't find any real time example in the web where i will take decision to define a variable transient.

How could i take the decision to define transient at the time of designing? Is there any realtime scenario that helps me to understand?

like image 823
Shashi Avatar asked Jan 22 '14 06:01

Shashi


1 Answers

To put it plainly: any field marked as transient is not saved if/when the object is serialized.

Let's say, for instance, you have an entity that needs to be serialized, but this entity has a data field that is, in a word, massive:

public class SerializeMe implements Serializable {
    private Integer id;
    private String value;
    private BigMatrix bigMatrix = BigMatrixFactory.fromValues(id, value).build();

    public BigDecimal doExpensiveOperation() {
        BigDecimal result = BigDecimal.ZERO;
        for(BigDecimal value : bigMatrix.getAllValuesFromAllMatrixFields() {
            matrixMultiply(result, value);
        }
        return result;
    }
}

You really don't want that BigMatrix to be serialized, since you'd be serializing a huge quantity of data which isn't necessary to rebuild the object (note, it can be built simply by using the builder pattern, given the ID and value).

In a trivial example, this may not be that big of a deal. But if you were sending this particular entity across a network, that would be a huge deal - you now have the expense of transferring not only the entity you want, but also some internal state about it that can be generated.

like image 58
Makoto Avatar answered Sep 27 '22 23:09

Makoto