Difference between revisions of "Databoard Tutorials"

From Developer Documents
Jump to navigation Jump to search
m
m
 
Line 5: Line 5:
  
 
<syntaxHighlight lang="java">
 
<syntaxHighlight lang="java">
// Binding can copy objects. All copies are deep.  
+
// Binding can copy objects. All copies are deep.  
// Mutable objects are duplicated, immutable are referenced.
+
// Mutable objects are duplicated, immutable are referenced.
 
 
// For instance, in object array, the array is copied, but its
+
// For instance, in object array, the array is copied, but its
// immutable literal instances (e.g. 1) is referenced.
+
// immutable literal instances (e.g. 1) is referenced.
 
 
Object[] original = new Object[] { 1, "X", 123.456 };
+
Object[] original = new Object[] { 1, "X", 123.456 };
Binding binding = Bindings.getBinding( original.getClass() );
+
Binding binding = Bindings.getBinding( original.getClass() );
Object[] copy = (Object[]) binding.cloneUnchecked( original );
+
Object[] copy = (Object[]) binding.cloneUnchecked( original );
  
// Print the objects
+
// Print the objects
System.out.println( "Original: "+binding.toString( original ) );
+
System.out.println( "Original: "+binding.toString( original ) );
System.out.println( "Clone  : "+binding.toString( copy    ) );     
+
System.out.println( "Clone  : "+binding.toString( copy    ) );     
 
</syntaxHighlight>
 
</syntaxHighlight>
  
 
Recursive classes can also be cloned, but they must be annotated with @Referable tag.
 
Recursive classes can also be cloned, but they must be annotated with @Referable tag.
 
<syntaxHighlight lang="java">
 
<syntaxHighlight lang="java">
static @Referable class X {
+
static @Referable class X {
public X reference;
+
public X reference;
}
+
}
 
 
public static void main(String[] args) throws BindingConstructionException, BindingException {
+
public static void main(String[] args) throws BindingConstructionException, BindingException {
// Create recursive instance
+
// Create recursive instance
X original = new X();
+
X original = new X();
original.reference = original;
+
original.reference = original;
 
 
Binding binding = Bindings.getBinding( original.getClass() );
+
Binding binding = Bindings.getBinding( original.getClass() );
X copy = (X) binding.cloneUnchecked( original );
+
X copy = (X) binding.cloneUnchecked( original );
  
// Print the objects
+
// Print the objects
System.out.println( "Original: "+binding.toString( original ) );
+
System.out.println( "Original: "+binding.toString( original ) );
System.out.println( "Clone  : "+binding.toString( copy    ) );
+
System.out.println( "Clone  : "+binding.toString( copy    ) );
}
+
}
 
</syntaxHighlight>
 
</syntaxHighlight>
  
Line 44: Line 44:
  
 
<syntaxHighlight lang="java">
 
<syntaxHighlight lang="java">
Binding binding = Bindings.getBindingUnchecked( int[].class );
+
Binding binding = Bindings.getBindingUnchecked( int[].class );
 
 
int[] array1 = new int[] { 1, 2, 3 };
+
int[] array1 = new int[] { 1, 2, 3 };
int[] array2 = new int[] { 1, 2, 3 };
+
int[] array2 = new int[] { 1, 2, 3 };
int[] array3 = new int[] { 2, 3, 4 };
+
int[] array3 = new int[] { 2, 3, 4 };
 
 
if ( binding.compare(array1, array2) == 0 ) {
+
if ( binding.compare(array1, array2) == 0 ) {
System.out.println( "array1 is equal to array2" );
+
System.out.println( "array1 is equal to array2" );
} else {
+
} else {
System.out.println( "array1 is not equal to array2" );
+
System.out.println( "array1 is not equal to array2" );
}
+
}
 
 
if ( binding.compare(array1, array3) == 0 ) {
+
if ( binding.compare(array1, array3) == 0 ) {
System.out.println( "array1 is equal to array3" );
+
System.out.println( "array1 is equal to array3" );
} else {
+
} else {
System.out.println( "array1 is not equal to array3" );
+
System.out.println( "array1 is not equal to array3" );
}
+
}
 
</syntaxHighlight>
 
</syntaxHighlight>
  
Line 66: Line 66:
 
Two bindings can compare instances of same datatype, even if they are of different classes.
 
Two bindings can compare instances of same datatype, even if they are of different classes.
 
<syntaxHighlight lang="java">
 
<syntaxHighlight lang="java">
ArrayList<Integer> array4 = new ArrayList<Integer>();
+
ArrayList<Integer> array4 = new ArrayList<Integer>();
Binding binding2 = Bindings.getBindingUnchecked( ArrayList.class, Integer.class );
+
Binding binding2 = Bindings.getBindingUnchecked( ArrayList.class, Integer.class );
array4.add( 1 );
+
array4.add( 1 );
array4.add( 2 );
+
array4.add( 2 );
array4.add( 3 );
+
array4.add( 3 );
 
 
if ( Bindings.compare(binding, array1, binding2, array4) == 0 ) {
+
if ( Bindings.compare(binding, array1, binding2, array4) == 0 ) {
System.out.println( "array1 is equal to array4" );
+
System.out.println( "array1 is equal to array4" );
} else {
+
} else {
System.out.println( "array1 is not equal to array4" );
+
System.out.println( "array1 is not equal to array4" );
}
+
}
 
</syntaxHighlight>
 
</syntaxHighlight>
  
Line 84: Line 84:
  
 
<syntaxHighlight lang="java">
 
<syntaxHighlight lang="java">
Binding binding = Bindings.getBindingUnchecked( int[].class );
+
Binding binding = Bindings.getBindingUnchecked( int[].class );
 
 
int[] array1 = new int[] { 1, 2, 3 };
+
int[] array1 = new int[] { 1, 2, 3 };
int[] array2 = new int[] { 1, 2, 3 };
+
int[] array2 = new int[] { 1, 2, 3 };
int[] array3 = new int[] { 2, 3, 4 };
+
int[] array3 = new int[] { 2, 3, 4 };
 
 
System.out.println( "Hashcode for array1 is " + binding.hashValue( array1 ) );
+
System.out.println( "Hashcode for array1 is " + binding.hashValue( array1 ) );
System.out.println( "Hashcode for array2 is " + binding.hashValue( array2 ) );
+
System.out.println( "Hashcode for array2 is " + binding.hashValue( array2 ) );
System.out.println( "Hashcode for array3 is " + binding.hashValue( array3 ) );
+
System.out.println( "Hashcode for array3 is " + binding.hashValue( array3 ) );
 
</syntaxHighlight>
 
</syntaxHighlight>

Latest revision as of 11:17, 7 September 2011

This document contains a some Java coding snippets for Databoard.

Object Deep-Copy

The binding class can be used for cloning objects. All copied objects are deep. Mutable objects are duplicated, and immutable are referenced.

<syntaxHighlight lang="java"> // Binding can copy objects. All copies are deep. // Mutable objects are duplicated, immutable are referenced.

// For instance, in object array, the array is copied, but its // immutable literal instances (e.g. 1) is referenced.

Object[] original = new Object[] { 1, "X", 123.456 }; Binding binding = Bindings.getBinding( original.getClass() ); Object[] copy = (Object[]) binding.cloneUnchecked( original );

// Print the objects System.out.println( "Original: "+binding.toString( original ) ); System.out.println( "Clone : "+binding.toString( copy ) ); </syntaxHighlight>

Recursive classes can also be cloned, but they must be annotated with @Referable tag. <syntaxHighlight lang="java"> static @Referable class X { public X reference; }

public static void main(String[] args) throws BindingConstructionException, BindingException { // Create recursive instance X original = new X(); original.reference = original;

Binding binding = Bindings.getBinding( original.getClass() ); X copy = (X) binding.cloneUnchecked( original );

// Print the objects System.out.println( "Original: "+binding.toString( original ) ); System.out.println( "Clone : "+binding.toString( copy ) ); } </syntaxHighlight>

Object Deep-Compare

Binding can compare any two instances. The compare function is deep.

<syntaxHighlight lang="java"> Binding binding = Bindings.getBindingUnchecked( int[].class );

int[] array1 = new int[] { 1, 2, 3 }; int[] array2 = new int[] { 1, 2, 3 }; int[] array3 = new int[] { 2, 3, 4 };

if ( binding.compare(array1, array2) == 0 ) { System.out.println( "array1 is equal to array2" ); } else { System.out.println( "array1 is not equal to array2" ); }

if ( binding.compare(array1, array3) == 0 ) { System.out.println( "array1 is equal to array3" ); } else { System.out.println( "array1 is not equal to array3" ); } </syntaxHighlight>


Two bindings can compare instances of same datatype, even if they are of different classes. <syntaxHighlight lang="java"> ArrayList<Integer> array4 = new ArrayList<Integer>(); Binding binding2 = Bindings.getBindingUnchecked( ArrayList.class, Integer.class ); array4.add( 1 ); array4.add( 2 ); array4.add( 3 );

if ( Bindings.compare(binding, array1, binding2, array4) == 0 ) { System.out.println( "array1 is equal to array4" ); } else { System.out.println( "array1 is not equal to array4" ); } </syntaxHighlight>


Object deep-hashcode

Binding can calculate deep hashcode for any instance

<syntaxHighlight lang="java"> Binding binding = Bindings.getBindingUnchecked( int[].class );

int[] array1 = new int[] { 1, 2, 3 }; int[] array2 = new int[] { 1, 2, 3 }; int[] array3 = new int[] { 2, 3, 4 };

System.out.println( "Hashcode for array1 is " + binding.hashValue( array1 ) ); System.out.println( "Hashcode for array2 is " + binding.hashValue( array2 ) ); System.out.println( "Hashcode for array3 is " + binding.hashValue( array3 ) ); </syntaxHighlight>