Le but de cet exercice est d'introduire des types paramétrés (generics) dans un code existant sans en changer la sémantique.
import java.util.List; public class Pair { private final Object first; private final Object second; public Pair(Object first,Object second) { this.first=first; this.second=second; } public Object getFirst() { return first; } public Object getSecond() { return second; } public boolean isContained(List list) { return list.contains(this); } public static void main(String[] args) { Pair p1=new Pair("toto",3); Pair p2=new Pair(p1,"titi"); Pair p3=(Pair)p2.getFirst(); String s=(String)p3.getFirst(); System.out.println(p3+" "+s); Pair p4; if (args.length==0) p4=p1; else p4=new Pair("titi","tutu"); } }
Ré-écrire l'ensemble du code de pour que la classe
Pair soit transformé en Pair<U,V>.
Penser à :
Dans le but d'écrire un logiciel de synthèse d'images par lancé
de rayon. Nous avons défini les classes Facet qui représente
une facette, Sphere qui représente une boule et Box
qui représente une boite rectangulaire en 3D.
Ces classes implantent déjà toute une méthode double intersect(Ray ray)
qui caclul si le rayon intersecte l'objet et si oui quelle est la distance
entre l'origine du rayon et le point d'intersection.
La classe Ray représente un rayon(basiquement un vecteur et
un point d'origine).
public static void main(String[] args) { Scene scene=new Scene(); scene.add(new Box(/*...*/)); scene.add(new Facet(/*...*/)); scene.add(new Sphere(/*...*/)); for(RayObject object:scene) System.out.println(object);
On souhaite définir une nouvelle annotation nommée ThreadSafe indiquant si un code est ou non thread-safe ainsi qu'une méthode permettant d'exécuter de façon sûre un code.
classe Example { @ThreadSafe(true) void tutu() {... } @ThreadSafe(false) void tutu() {... } @ThreadSafe void toto() {..} // équivalent à true }