Documente Academic
Documente Profesional
Documente Cultură
Mtodos y clases
genricos
Ma. de los Angeles Junco Rey
La superclase Object
La clase Object contiene varios mtodos y es la clase
universal.
No es una clase abstracta, por lo que define e
implementa cada uno de sus mtodos que pueden
usarse con polimorfismo para crear algoritmos
generalizados.
Por ello puede designarse cualquier objeto a una
referencia tipo Object, pero se requiere de realizar un
down-cast para regresar la referencia a su tipo original
cuando se acceden sus valores.
Esto puede generar un error de ejecucin tipo
ClassCastException si se equivoca de tipo.
La superclase Object
}
Ma. de los Angeles Junco Rey
Solucin (?)
Crear una clase GENERAL que guarde elementos de
diferentes tipos. Puede utilizarse el tipo universal
Object.
A considerar:
Es necesario realizar un cast para acceder a cualquier
elemento de una coleccin
}
Ma. de los Angeles Junco Rey
stStr.setValue(new Integer(50));
str = (String) stStr.getValue( );
El compilador no
detecta el error
10
Mtodos GENERALES
Sin embargo, podemos aprovechar la ventaja de
utilizar mtodos GENERALES (manejando Object) en
caso de que NO sea estrictamente necesario
conocer el TIPO de dato.
Ejemplo: Bsqueda secuencial o LastIndexOf de
Objetos que implementan el mtodo equals()
11
12
// index = 1
// index = -1
13
lastIndexOf GENERAL
public static int lastIndexOf (Object[] arr, int fromIndex, Object
target) throws IndexOutOfBoundsException, NullPointerException {
if (arr == null) throw new NullPointerException(Arreglo
inexistente);
if (fromIndex < 0 || fromIndex >= arr.length)
throw new IndexOutOfBoundsException (Indice fuera de
rango);
for(int i= arr.length-1; i >= fromIndex; i--){
if(arr[i].equals(target))
return i;
}
return -1;
}
Nota: Este mtodo funciona para cualquier tipo (Object) siempre y cuando dicho
tipo implemente equals().
Collections
14
ArrayList
Object
Object
Object
Object
ArrayList <rosas>
15
16
Generics
El concepto de Generics se aplica en:
Clases
Interfaces
Mtodos
17
Creando y utilizando
colecciones genricas
Se declara una coleccin genrica con el nombre de
la misma seguido de la siguiente sintaxis: <T>
public class GenClass<T>
Para crear un objeto de la clase genrica incluyendo
el tipo de dicho objeto de la siguiente forma:
GenClass<String> objGen;
18
19
Clases Genricas
Sintaxis de uso de una clase genrica:
Store <String> stStr = new Store <String> (good);
20
Clases Genricas
Sintaxis de uso de una clase genrica:
stStr.setValue(str);
21
Clases Genricas
Sintaxis de uso de una clase genrica:
ya no se requiere una conversin
(cast) para poder aplicar un
mtodo de la clase Time24
22
Interfases Genricas
Sintaxis de una interfaz genrica:
23
24
25
26
this.total = this.total + v;
}
}
Ma. de los Angeles Junco Rey
27
La Interfaz Comparable
En java.lang est definida la interfaz Comparable que se
utiliza mucho con las colecciones genricas. Se utiliza para
definir un orden natural entre los objetos de una clase (es
decir, pueden compararse entre s)
public interface Comparable <T>
{
int compareTo (T item);
<0
== 0
>0
28
La Interfaz Comparable
public class Time24 implements Comparable <Time24> {
..
public int compareTo (Time24 item) {
int time = this.hour * 60 + this.minute;
int ttime = item.hour * 60 + item.minute;
if (time < ttime)
return -1;
else if (time == ttime)
return 0;
else
return 1;
}
}
Ma. de los Angeles Junco Rey
29
Mtodos Genricos
Se especifica el tipo genrico en la declaracin del
mtodo y debe usarse en al menos un parmetro.
public static <T> T max (T objA, T objB) {
if ( ( (Comparable <T>) objA).compareTo(objB) > 0)
return objA;
else
return objB;
}
Se requiere la conversin
(cast) para poder aplicar el
mtodo compareTo al objeto
objA
30
Mtodos Genricos
Suponiendo que la clase Rectangle no implementa
a la interface Comparable:
Rectangle rectA = new Rectangle(4, 5);
Rectangle rectB = new Rectangle(6, 2);
Rectangle rectC = max( rectA, rectB );
31
32
Comodines
Tambin se puede indicar que el tipo mismo o alguna
superclase del mismo implementa o hereda de quien
se necesita.
public static <T extends Comparable<? super T>> T max (T a, T b)
{
.
}
T o una de sus
superclases implementa a
Comparable
33
int mid;
T midValue;
while (first < last) {
mid = (first+last)/2;
midValue = arr[mid];
if (target.compareTo(midValue) == 0)
return mid;
else
if (target.compareTo(midValue) < 0)
last = mid;
else
first = mid+1;
}
return -1;
}
Ma. de los Angeles Junco Rey
34
// Error
// Error
// Error
35
Clase Arrays
Ma. de los Angeles Junco Rey
36
Arrays.toString(arr)
public static String toString (Object[] arr) {
return "[]";
37
Arrays.sort(strArr);
System.out.println("\nArreglo de ordenado: " + Arrays.toString(strArr));