Starting from:
$30

$24

Assignment 7: Type Compatibility and Generics Solved


·Source code: Generics.


In this assignment, you should submit three Java files for Question 1 and2:ArrayExample.java,ArrayExa andArrayListExample.java. For Question 3 the "difficult question", you should submit a folder that contains all modified files.

These questions use a hierarchy of classes of simple geometric objects:

·GeometricShape.java

·TwoDShape.java

·ThreeDShape.java

·Circle.java

·Cone.java

·Rectangle.java

·Sphere.java

Test.javais a little test class that you can run to make sure the other classes are working.



1. Java Arrays and Type Compatibility Rules



Look at the skeleton for the  main method inArrayExample.java. Add some additional statements to it so that the code compiles correctly, and when it is run, it raises

a  java.lang.ArrayStoreException when adding a cone to geoshapes (Adding a circle should be

OK). Here is the exception you should get:



1 of 6    2018-12-22, 9:21 p.m.

Assignment    https://eclass.srv.ualberta.ca/mod/assign/view.php?id=3237749




Exception in thread "main" java.lang.ArrayStoreException: Cone

at ArrayExample.main(ArrayExample.java:10)



Next, look at the code inArrayExampleGood.java(This is exactly the same except for the class name). Add statements to this code as needed, so that the code compiles correctly, and runs without error. If you want, you can add some other statements to these main methods to get them printing something, but you don't need to.



2. Java Generics



Look at the skeleton code inArrayListExample.java. Add additionalmethods  total_area ,  total_perime and  add_empties . Leave the  main method untouched. You should get this output when you run the code:


Example with a list of shapes with a circle, a cone, and some empty shapes Circle[radius=1.0]

Cone[radius=2.0, height=3.0]

Circle[radius=0.0]

Cone[radius=0.0, height=0.0]

Rectangle[width=0.0, height=0.0]

Sphere[radius=0.0]

Total number of shapes: 6

Example with a list of rectangles

Rectangle[width=2.0, height=3.0]

Rectangle[width=5.0, height=5.0]

Total number of shapes: 2

total area of rectangles: 31.0

total perimeter of rectangles: 30.0

Example with a list of 2d shapes with a circle and a rectangle

Rectangle[width=10.0, height=10.0]

Circle[radius=2.0]

Total number of shapes: 2

total area of flat shapes: 112.56637061435917

Example list of spheres



2 of 6    2018-12-22, 9:21 p.m.
Sphere[radius=10.0]

Sphere[radius=50.0]

Sphere[radius=0.0]

Total number of shapes: 3





3. Difficult Question


Turn in a separate copy of all your files in a new directory (You'll need to touch many, perhaps all, of the files for the difficult question, not justArrayListExample.java). Add a  supersize method to each of your geometric shape interfaces and classes that returns a new geometric shape, of the same type as the receiver, that is twice as large in each dimension as the receiver. For example, super sizing a cone with radius 10 and height 4 should return a new cone with radius 20 and height 8. The obvious declaration for  supersize in  GeometricShape would be:


public GeometricShape supersize();



However, we want the type of supersize for  Cone to say that it returns a  Cone , but not a  GeometricShape . An immediate solution is to generalize the method:


public interface GeometricShape {

public <T> T supersize();

}



Then the  supersize method in  Cone  can be written as:


public Cone supersize() {

return new Cone(2.0 * radius, 2.0 * height);

}



However, it is not good, because we can even return a non-  GeometricShape , which is not correct at all! So a better way is to add a type parameter:


public interface GeometricShape {

public voiddescribe();

public <T extends GeometricShape> T supersize();

}



In this condition,  supersize can only return geometric shapes. But this is not comprehensive, either. For example, it is possible that a  Rectangle.supersize returns a circle.


Make the appropriate modifications to all the geometric shape classes and add amethod  supersize_lis


 6    2018-12-22, 9:21 p.m.so that it takes an array list of some kind of geometric shapes (for example, rectangles) and returns an array list of the same type, with the shapes super sized. The skeleton code inArrayListExample.javaincludes some commented-out lines at the end that use

the supersize_list method. Uncomment them (but don't otherwise change them). You should get the following additional output:


super-sizing a list of rectangles

Rectangle[width=4.0, height=6.0]

Rectangle[width=10.0, height=10.0]

Total number of shapes: 2

super-sizing a list of spheres

Sphere[radius=20.0]

Sphere[radius=100.0]

Sphere[radius=0.0]

Total number of shapes: 3



Hint: starts with generalizing the  GeometricShape :


public interface GeometricShape<T extends GeometricShape<T>> {

public voiddescribe();

public T supersize();

}



Generics.zip 


More products