I know C/C++/C#/ActionScript/PHP and have worked in all of them. As per my Knowledge we generally initialize object as
Object obj = new Object();
Java does the same most of the times but yesterday while working with Netbeans and JTable swing control, IDE generated this code which kind of looks a bit strange to me. Any explanation of how is it initializing an object? What's the {..} part after new DefaultTableModel(..)?
_model = new DefaultTableModel(
new Object [][] {
},
new String [] {
"Id", "Project Title", "Start Date", "Deadline", "Description", "PercentDone"
}) {
Class[] types = new Class [] {
java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class
};
boolean[] canEdit = new boolean [] {
false, false, false, false, false, false
};
@Override
public Class getColumnClass(int columnIndex) {
return types [columnIndex];
}
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
return canEdit [columnIndex];
}
};
It's called an anonymous class, combining class definition and instantiation. Links:
Line by line explanation:
// creates a new instance of the DefaultTableModel class and assigns it
// to a previously declared variable named _model.
// Note that contrary to C++, starting a variable name with an underscore is
// legal but discouraged as a convention in Java
// (http://docs.oracle.com/javase/tutorial/java/nutsandbolts/variables.html)
_model = new DefaultTableModel(
// this is first parameter to the DefaultTableModel constructor taking
// a two-dimensional array of Objects as the first parameter, and an
// array of Objects as the second. This creates an empty 2D array.
new Object [][] {
},
// this is the second parameter to the DefaultTableModel constructor.
// It creates an array of Strings initialized with the provided values
new String [] {
"Id", "Project Title", "Start Date", "Deadline", "Description", "PercentDone"
})
// start of the redifinition of the DefaultTableModel class
{
// creates a member variable named types at the default visibility.
// This member is an array of Class objects, initialized with the
// provided values
Class[] types = new Class []
java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class
};
// creates a member variable named canEdit at the default visibility.
// This member is an array of booleans, all initialized to false.
boolean[] canEdit = new boolean [] {
false, false, false, false, false, false
};
// annotation used by IDEs and the compiler specifying that the
// method that follows overrides a method in the DefaultTableModel
// class. If the methods does not actually override such a method,
// an error will be generated (e.g. due to a spelling mistake in the
// method name or the wrong parameters being declared)
@Override
// override of the default getColumnClass method
public Class getColumnClass(int columnIndex) {
return types [columnIndex];
}
// see explanation above
@Override
// override of the default isCellEditable method
public boolean isCellEditable(int rowIndex, int columnIndex) {
return canEdit [columnIndex];
}
// end of the anonymous class
};
// end of the constructor call and assignment to _model statement.
);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With