== Why is this an issue?

Fields marked as `transient` in a `Serializable` class will be ignored during serialization and consequently not written out to a file (or stream). 

This can be useful in situations such as where the content of a field can be recomputed from other fields.
To reduce the output size, this field can be marked as `transient` and recomputed when a given object is deserialized.

Since `transient` is very specific to classes that implement `Serializable`, it is superfluous in classes that do not.

This rule raises an issue when a field is marked as `transient`, even though the containing class does not implement `Serializable`.


== How to fix it

Ask yourself whether this class should be serializable.
If yes, ensure it implements `Serializable` and provides any additional logic required to serialize and deserialize an instance of this type.
Otherwise, remove the `transient` modifier from this field.


=== Code examples

==== Noncompliant code example

[source,java,diff-id=1,diff-type=noncompliant]
----
class Vegetable {
  private transient Season ripe; // Noncompliant, the "Vegetable" class does not implement "Serializable" but the field is marked as "transient"
  // ...
}
----

==== Compliant solution

[source,java,diff-id=1,diff-type=compliant]
----
class Vegetable {
  private Season ripe; // Compliant, the field is not marked as "transient"
  // ...
}
----


== Resources

* https://www.baeldung.com/java-transient-keyword[Baeldung - The transient Keyword in Java]


ifdef::env-github,rspecator-view[]

'''
== Implementation Specification
(visible only on this page)

=== Message

Remove the "transient" modifier from this field.


endif::env-github,rspecator-view[]
