Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
El lado cool de                 JavaLeo Soto M.@leosotoJava Day INACAP Osorno, Junio 2010
¡Vamos a ir rápido!1. Collections2. Generics3. Misceláneos: autoboxing, varargs4. Reflection API5. Annotations6. Java Compi...
1. Collections
Array? Vector? Hashtable?
Nope.
ImplementacionesList
visitas
=
new
ArrayList();Set
alumnos
=
new
HashSet();Map
notasPorAlumno
=
new
HashMap();Queue
pendie...
AlgoritmosCollections.sort(visitas);Collections.binarySearch(visitas,
v);Collections.shuffle(alumnos);Collections.max(nota...
2. Generics
¿Recuerdan?List
visitas
=
new
ArrayList();Set
alumnos
=
new
HashSet();Map
notasPorAlumno
=
new
HashMap();Queue
pendientes
...
¡Con Generics!List<Visita>
visitas
=
 new
ArrayList<Visita>();Set<Alumno>
alumnos
=
 new
HashSet<Alumno>();Map<Alumno,
Lis...
¿Y qué diablos ganamos?
Type Safetyalumnos.add(“esto
arroja
error”);String
foo
=
alumnos.get(0);
//
Esto
tb
LegibilidadAlumno
primero
=
(Alumno)alumnos.get(0);
LegibilidadAlumno
primero
=
alumnos.get(0);
3. Misceláneos: autoboxing, varargs
AutoboxingInteger
boxed
=
new
Integer(1);int
unboxed
=
boxed.intValue();
AutoboxingInteger
boxed
=
1;int
unboxed
=
boxed;
AutoboxingInteger
boxed
=
null;int
unboxed
=
boxed;
//
Oops
AutoboxingList<Integer>
notas;notas.add(4);notas.add(7);int
suma
=
notas.get(0)
+
notas.get(1);
Varargspublic
void
saludar(String[]
nombres)
{

for(String
nombre:
nombres)
{



System.out.printf(“Hola
%s”,
nombre)

}}
Varargssaludar(new
String[]
{“Pedro”,
“Juan”});
Varargssaludar(“Pedro”,
“Juan”);
Varargspublic
void
saludar(String[]
nombres)
{

for(String
nombre:
nombres)
{



System.out.printf(“Hola
%s”,
nombre)

}}
Varargspublic
void
saludar(String...
nombres)
{

for(String
nombre:
nombres)
{



System.out.printf(“Hola
%s”,
nombre)

}}
4. Reflection API
¿Metaprogramación?
Uhm, no exactamente
¡Java dinámico!
Algo así
Demohttps://github.com/leosoto/demos_javaday/tree/master/reflection/
Sin reflection Java no sería lo que es
A veces para bien y otras veces para mal
Hint: Si usa XML, probablemente es para mal ;)
5. Annotations
Metadatos para el código
Annotations@Deprecatedpublic
void
metodoAntiguo()
{

//
blah
blah}
Pero también se pueden definir nuevas
Annotations@Betapublic
class
UntestedPlugin
{}
Annotationspublic
@interface
Beta
{};
AnnotationsClass
pluginClass
=
loadPlugin();if
(pluginClass.isAnnotationPresent(

Beta.class))
{


//
Alertar
al
usuario
q...
Y las anotaciones también pueden tener atributos
Annotationspublic
@interface
Plugin
{

String
author()
default
“unknown”;

boolean
beta()
default
false;};
Annotations@Plugin(author=“Leo”,
beta=true)public
class
UntestedPlugin
{}
6. Java Compiler API
Demohttps://github.com/leosoto/demos_javaday/tree/master/compiler/
Ugh
7. Scripting API
Demohttps://github.com/leosoto/demos_javaday/tree/master/scripting/
¿Con gusto a poco?8. Ejercicio para el auditor: ClassLoaders
¡Muchas gracias!       @leosotohttp://blog.leosoto.com
¿Preguntas?       @leosotohttp://blog.leosoto.com
El Lado Cool de Java
Upcoming SlideShare
Loading in …5
×

El Lado Cool de Java

4,282 views

Published on

Published in: Technology, Education
  • Be the first to comment

El Lado Cool de Java

  1. 1. El lado cool de JavaLeo Soto M.@leosotoJava Day INACAP Osorno, Junio 2010
  2. 2. ¡Vamos a ir rápido!1. Collections2. Generics3. Misceláneos: autoboxing, varargs4. Reflection API5. Annotations6. Java Compiler API7. Scripting API
  3. 3. 1. Collections
  4. 4. Array? Vector? Hashtable?
  5. 5. Nope.
  6. 6. ImplementacionesList
visitas
=
new
ArrayList();Set
alumnos
=
new
HashSet();Map
notasPorAlumno
=
new
HashMap();Queue
pendientes
=
new
LinkedList();
  7. 7. AlgoritmosCollections.sort(visitas);Collections.binarySearch(visitas,
v);Collections.shuffle(alumnos);Collections.max(notasPorAlumno.get(a));Collections.reverse(pendientes);
  8. 8. 2. Generics
  9. 9. ¿Recuerdan?List
visitas
=
new
ArrayList();Set
alumnos
=
new
HashSet();Map
notasPorAlumno
=
new
HashMap();Queue
pendientes
=
new
LinkedList();
  10. 10. ¡Con Generics!List<Visita>
visitas
=
 new
ArrayList<Visita>();Set<Alumno>
alumnos
=
 new
HashSet<Alumno>();Map<Alumno,
List<Integer>>
notas
=
 new
HashMap<Alumno,
List<Integer>();Queue<Runnable>
pendientes
=


new
LinkedList<Runnable>();
  11. 11. ¿Y qué diablos ganamos?
  12. 12. Type Safetyalumnos.add(“esto
arroja
error”);String
foo
=
alumnos.get(0);
//
Esto
tb
  13. 13. LegibilidadAlumno
primero
=
(Alumno)alumnos.get(0);
  14. 14. LegibilidadAlumno
primero
=
alumnos.get(0);
  15. 15. 3. Misceláneos: autoboxing, varargs
  16. 16. AutoboxingInteger
boxed
=
new
Integer(1);int
unboxed
=
boxed.intValue();
  17. 17. AutoboxingInteger
boxed
=
1;int
unboxed
=
boxed;
  18. 18. AutoboxingInteger
boxed
=
null;int
unboxed
=
boxed;
//
Oops
  19. 19. AutoboxingList<Integer>
notas;notas.add(4);notas.add(7);int
suma
=
notas.get(0)
+
notas.get(1);
  20. 20. Varargspublic
void
saludar(String[]
nombres)
{

for(String
nombre:
nombres)
{



System.out.printf(“Hola
%s”,
nombre)

}}
  21. 21. Varargssaludar(new
String[]
{“Pedro”,
“Juan”});
  22. 22. Varargssaludar(“Pedro”,
“Juan”);
  23. 23. Varargspublic
void
saludar(String[]
nombres)
{

for(String
nombre:
nombres)
{



System.out.printf(“Hola
%s”,
nombre)

}}
  24. 24. Varargspublic
void
saludar(String...
nombres)
{

for(String
nombre:
nombres)
{



System.out.printf(“Hola
%s”,
nombre)

}}
  25. 25. 4. Reflection API
  26. 26. ¿Metaprogramación?
  27. 27. Uhm, no exactamente
  28. 28. ¡Java dinámico!
  29. 29. Algo así
  30. 30. Demohttps://github.com/leosoto/demos_javaday/tree/master/reflection/
  31. 31. Sin reflection Java no sería lo que es
  32. 32. A veces para bien y otras veces para mal
  33. 33. Hint: Si usa XML, probablemente es para mal ;)
  34. 34. 5. Annotations
  35. 35. Metadatos para el código
  36. 36. Annotations@Deprecatedpublic
void
metodoAntiguo()
{

//
blah
blah}
  37. 37. Pero también se pueden definir nuevas
  38. 38. Annotations@Betapublic
class
UntestedPlugin
{}
  39. 39. Annotationspublic
@interface
Beta
{};
  40. 40. AnnotationsClass
pluginClass
=
loadPlugin();if
(pluginClass.isAnnotationPresent(

Beta.class))
{


//
Alertar
al
usuario
que
esta
usando

//
un
plugin
beta}
  41. 41. Y las anotaciones también pueden tener atributos
  42. 42. Annotationspublic
@interface
Plugin
{

String
author()
default
“unknown”;

boolean
beta()
default
false;};
  43. 43. Annotations@Plugin(author=“Leo”,
beta=true)public
class
UntestedPlugin
{}
  44. 44. 6. Java Compiler API
  45. 45. Demohttps://github.com/leosoto/demos_javaday/tree/master/compiler/
  46. 46. Ugh
  47. 47. 7. Scripting API
  48. 48. Demohttps://github.com/leosoto/demos_javaday/tree/master/scripting/
  49. 49. ¿Con gusto a poco?8. Ejercicio para el auditor: ClassLoaders
  50. 50. ¡Muchas gracias! @leosotohttp://blog.leosoto.com
  51. 51. ¿Preguntas? @leosotohttp://blog.leosoto.com

×