Mettiamo alla prova la nostra conoscenza di java con altri tre esercizi.
Scrivi una classe che permetta di salvare al suo interno una coppia di generici.
public class Coppia<T,K> {
private T chiave;
private K valore;
public Coppia(T chiave, K valore){
this.chiave = chiave;
this.valore = valore;
}
public T getChiave(){
return chiave;
}
public void setChiave(T chiave){
this.chiave = chiave;
}
public K getValore(){
return valore;
}
public void setValore(K valore){
this.valore = valore;
}
}
La seguente classe classe genera una CustomException, il tuo compito è usarla e gestire l’eccezione. Puoi confrontare la tua soluzione con la mia che trovi qui sotto.
import java.text.SimpleDateFormat;
import java.util.Date;
public class CustomLogger {
public CustomLogger() {
}
public void log(String message) throws CustomException {
if(Math.random() < 0.5) {
throw new CustomException("Logger error!");
}
else {
String time = new SimpleDateFormat("HH:mm:ss.SSS").format(new Date());
System.out.println("[" + time + "] " + message);
}
}
}
public class CustomException extends Exception {
public CustomException(String message) {
super(message);
}
}
La classe CustomLogger fa il log dei messaggi sulla console, cioè li stampa con informazioni aggiuntive, in questo caso l’orario. Il Math.random() al suo interno fa si che circa il 50% delle volte che la funzione log viene eseguita si generi una CustomException. Il nostro compito quindi è quello di gestire questa eccezione ma di assicurarci anche che i messaggi vengano comunque stampati sullo schermo, nel catch metterò quindi una System.out.println() che stamperà comunque il messaggio.
class Main {
private static CustomLogger logger;
public static void main(String[] args) {
logger = new CustomLogger();
stampaLog("Linea 1");
stampaLog("Linea 2");
stampaLog("Linea 3");
stampaLog("Linea 4");
stampaLog("Linea 5");
stampaLog("Linea 6");
stampaLog("Linea 7");
stampaLog("Linea 8");
stampaLog("Linea 9");
stampaLog("Linea 10");
}
private static void stampaLog(String messaggio) {
try{
logger.log(messaggio);
}
catch(CustomException e){
System.out.println("CustomLogger ha lanciato un'eccezione, il messaggio era: " + messaggio);
}
}
}
Dato il seguente diagramma UML implementa le sue classi. Puoi sempre controllare come ho fatto io premendo su soluzione.
public interface Velivolo {
public void decolla();
public void atterra();
}
public abstract class Aereo implements Velivolo{
public String marca;
public String modello;
public int anno;
public Aereo(String marca, String modello, int anno){
this.marca = marca;
this.modello = modello;
this.anno = anno;
}
public String getMarca(){
return marca;
}
public String getModello(){
return modello;
}
public int getAnno(){
return anno;
}
public abstract String emergenza();
public abstract void decolla();
public abstract void atterra();
}
public class AereoDiLinea extends Aereo {
public int passeggeri;
public String compagnia;
public AereoDiLinea(String marca, String modello, int anno, int passeggeri, String compagnia){
super(marca, modello, anno);
this.passeggeri = passeggeri;
this.compagnia = compagnia;
}
public String emergenza() {
return "Indossare le mascherine per l'ossigneno.";
}
public void decolla() {
System.out.println("Un aereo di linea ("+ modello + ") sta decollando!");
}
public void atterra() {
System.out.println("Un aereo di linea ("+ modello + ") sta atterrando!");
}
public int getPasseggeri(){
return passeggeri;
}
public String getCompagnia(){
return compagnia;
}
}
public class AereoMilitare extends Aereo {
public double velocita;
public double peso;
public AereoMilitare(String marca, String modello, int anno, double velocita, double peso){
super(marca, modello, anno);
this.velocita = velocita;
this.peso = peso;
}
public String emergenza() {
return "Aprire la calotta e gettarsi con il paracadute!";
}
public void decolla() {
System.out.println("Un aereo militare ("+ modello + ") sta decollando!");
}
public void atterra() {
System.out.println("Un aereo militare ("+ modello + ") sta atterrando!");
}
public double getVelocita(){
return velocita;
}
public double getPeso(){
return peso;
}
}