0
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

3,718

Published on

Published in: Technology, Education
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,718
On Slideshare
0
From Embeds
0
Number of Embeds
7
Actions
Shares
0
Downloads
10
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Transcript of "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
    1. A particular slide catching your eye?

      Clipping is a handy way to collect important slides you want to go back to later.

    ×