initialization block vs constructor vs variable initialization

holap

I'm trying to clean the code of a class that use initialization bloks in a manner I would never do, and I'm just wondering if I am missing some informations. The code looks like this:

@Entity
class MyClass extends BaseClass {

    @ManyToMany(fetch=FetchType.EAGER)
    private Set<OherClass> others;

    {
        if (others == null)
            others = new HashSet<OtherClass>();
    }

    public MyClass(){
        super();
    }

    //getters, setters and other stuff follows
}

I think there is no reason to prefer the above code against this:

@Entity
class MyClass extends BaseClass {

    @ManyToMany(fetch=FetchType.EAGER)
    private Set<OherClass> others = new HashSet<OtherClass>();
}

Or this:

@Entity
class MyClass extends BaseClass {

    @ManyToMany(fetch=FetchType.EAGER)
    private Set<OherClass> others;

    public MyClass(){
        this.others = new HashSet<OtherClass>();
    }
}

I asked my college, but the only thing he was able to answer is how initialization block works and other things I already know. I wonder if there are some subtle misbehaviour of java (even old one already fixed) or frameworks (hibernate, spring) in case of serialization, reflection, database persistence, injection or any unusual situation that could make that code necessary.

Marko Topolnik
private Set<OherClass> others;
{
    if (others == null)
        others = new HashSet<OtherClass>();
}

The above code was written without an understanding of Java semantics. others == null will always be true. Therefore this is nothing but a very convoluted and confused way of writing

private Set<OherClass> others = new HashSet<OtherClass>();

Hibernate will indeed wrap some "magic" around the object construction, but it will still need to obtain an instance from the default constructor. At that point all the instance initializers have run.

On a more general note, always prefer to immediately initialize collection-valued variables with constant expressions and, even better, make the field final. That's one less worry for the rest of your code.

With the above you still have all the options open on how to populate the set, which can differ from constructor to constructor.

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related

From Dev

initialization block vs constructor vs variable initialization

From Dev

static initialization block vs constructor java

From Dev

Initialization in definition vs. initialization in constructor

From Dev

Bad array initialization vs assignment copy constructor initialization

From Dev

brace-or-equal initialization vs constructor delegation

From Dev

Initialization block with exception throwing constructor

From Dev

Java inheritance vs initialization

From Dev

int * vs char * initialization

From Dev

Which kinds of initialization is more appropriate in constructor vs componentWillMount?

From Dev

Direct Initialization vs. Value Initialization

From Dev

eager initialization singleton vs lazy initialization singleton

From Dev

Direct Initialization vs. Value Initialization

From Dev

Eager initialization vs Lazy initialization use case

From Dev

VS2013 default initialization vs value initialization

From Dev

Value Initialization vs Calloc vs Manual Initialization Speed

From Dev

VS2013 default initialization vs value initialization

From Dev

defaultdict vs dict element initialization

From Dev

VS2013 list initialization

From Dev

Memoization vs Lazy initialization/evaluation

From Dev

{} vs. () initialization of a class member

From Dev

defaultdict vs dict element initialization

From Dev

Dependency injection vs singleton, Initialization

From Dev

Class POD members default-initialization vs. zero-initialization vs. no-initialization?

From Dev

copy list initialization vs direct list initialization of temporary

From Dev

Automatic variable initialization and copy/move constructor

From Dev

Azure Worker Role - Using OnStart() vs. Constructor for Once Only Initialization

From Dev

Member initialization list vs assignment/copy constructor (in boost deadline_timer)

From Dev

c++ template class, initialization () vs {}

From Dev

Union Zero Initialization with clang vs gcc

Related Related

  1. 1

    initialization block vs constructor vs variable initialization

  2. 2

    static initialization block vs constructor java

  3. 3

    Initialization in definition vs. initialization in constructor

  4. 4

    Bad array initialization vs assignment copy constructor initialization

  5. 5

    brace-or-equal initialization vs constructor delegation

  6. 6

    Initialization block with exception throwing constructor

  7. 7

    Java inheritance vs initialization

  8. 8

    int * vs char * initialization

  9. 9

    Which kinds of initialization is more appropriate in constructor vs componentWillMount?

  10. 10

    Direct Initialization vs. Value Initialization

  11. 11

    eager initialization singleton vs lazy initialization singleton

  12. 12

    Direct Initialization vs. Value Initialization

  13. 13

    Eager initialization vs Lazy initialization use case

  14. 14

    VS2013 default initialization vs value initialization

  15. 15

    Value Initialization vs Calloc vs Manual Initialization Speed

  16. 16

    VS2013 default initialization vs value initialization

  17. 17

    defaultdict vs dict element initialization

  18. 18

    VS2013 list initialization

  19. 19

    Memoization vs Lazy initialization/evaluation

  20. 20

    {} vs. () initialization of a class member

  21. 21

    defaultdict vs dict element initialization

  22. 22

    Dependency injection vs singleton, Initialization

  23. 23

    Class POD members default-initialization vs. zero-initialization vs. no-initialization?

  24. 24

    copy list initialization vs direct list initialization of temporary

  25. 25

    Automatic variable initialization and copy/move constructor

  26. 26

    Azure Worker Role - Using OnStart() vs. Constructor for Once Only Initialization

  27. 27

    Member initialization list vs assignment/copy constructor (in boost deadline_timer)

  28. 28

    c++ template class, initialization () vs {}

  29. 29

    Union Zero Initialization with clang vs gcc

HotTag

Archive