RE003 Violation of Uniqueness
[Previous]  [Next] 
|
User Manual [Previous]  [Next] RE003 Violation of UniquenessUmple runtime exception thrown when uniqueness is violated in a constructorThe unique keyword in Umple can be applied to an attribute to ensure that each instance of the class in the currently running program has a unique value for that attribute. The code generated by Umple will not allow this constraint to be violated. If an attempt is made to call the constructor of a class with an argument that would result in a violation of the uniqueness constraint, an exception will be thrown. The text of the constraint will start with the phrase "Cannot create". In the example below,
Programs should be designed with logic that avoids violation of uniqueness. It is not recommended that production code relies on catching this exception as a normal part of its logic. Example// This demonstrates code that will throw the // uniqueness exception class Student { unique Integer number; name; public static void main(String[] argv) { Student s1 = null; Student s2 = null; Student s3 = null; Student s4 = null; System.out.println("Initial\ns1= "+s1+ "\ns2= "+s2+"\ns3= "+s3+"\n\n"); // We set up the first student s1 with no problem s1 = new Student(1,"Abel"); // For the second student we use a try catch // block to catch the exception // Ideally code would avoid creating violations // to start with, but the following // approach can be used as a safety mechanism. try { s2 = new Student(1, "Baker"); } catch (RuntimeException re) { System.out.println("Exception Caught: "+re+"\n"); } // We now create a student that doesn't // violate uniqueness s3 = new Student(2,"Charlie"); // Uniqueness can also be detected by trying // to change a value // This does not throw the exception, since // the setNumber() method returns false boolean result = s3.setNumber(1); if(!result) System.out.println( "Could not change number as it would have"+ " violated uniqueness\n"); System.out.println("Final\ns1= "+s1+ "\ns2= "+s2+"\ns3= "+s3+"\n\n"); // The following will throw the exception // without being caught s4 = new Student(1, "Delta"); // This statement will not be reached System.out.println( "This line should not be reached"); } } Load the above code into UmpleOnline |