[{"data":1,"prerenderedAt":1511},["ShallowReactive",2],{"navigation_docs":3,"-ejemplos-ejemplo-04":412,"-ejemplos-ejemplo-04-surround":1506},[4,18,43,118,160,200,231,320,346],{"title":5,"path":6,"stem":7,"children":8,"icon":17},"Evaluación","\u002Fintroduction","1.introduction\u002F1.index",[9,12],{"title":10,"path":6,"stem":7,"icon":11},"Método de Evaluación","i-iconamoon-cheque-bold",{"title":13,"path":14,"stem":15,"icon":16},"Plataforma de Aprendizaje","\u002Fintroduction\u002Fplataforma","1.introduction\u002F2.plataforma","i-lucide-book-marked","i-lucide-house",{"title":19,"icon":20,"path":21,"stem":22,"children":23,"page":42},"Entorno de desarrollo","i-codicon-edit-code","\u002Fide","2.ide",[24,28,33,37],{"title":25,"path":26,"stem":27,"icon":20},"¿Qué es un IDE?","\u002Fide\u002Fentorno","2.ide\u002F1.entorno",{"title":29,"path":30,"stem":31,"icon":32},"Estructura de un Proyecto","\u002Fide\u002Festructura","2.ide\u002F2.estructura","i-clarity-tree-view-line",{"title":34,"path":35,"stem":36,"icon":20},"La compilación en un IDE","\u002Fide\u002Fcompilacion","2.ide\u002F3.compilacion",{"title":38,"path":39,"stem":40,"icon":41},"Depuración de Código","\u002Fide\u002Fdepurar","2.ide\u002F4.depurar","i-lucide-bug",false,{"title":44,"icon":45,"path":46,"stem":47,"children":48,"page":42},"Clases y Objetos","i-catppuccin-java-class","\u002Fclases-objetos","3.clases-objetos",[49,53,57,62,66,70,74,78,83,88,92,96,101,106,110,114],{"title":50,"path":51,"stem":52},"Repaso previo a Clases y Objetos","\u002Fclases-objetos\u002Fpreview","3.clases-objetos\u002F00.preview",{"title":54,"path":55,"stem":56,"icon":45},"¿Qué es la Programación Orientada a Objetos (POO)?","\u002Fclases-objetos\u002Fpoo","3.clases-objetos\u002F01.poo",{"title":58,"path":59,"stem":60,"icon":61},"Diagramas de Clases y Objetos","\u002Fclases-objetos\u002Fdiagramas","3.clases-objetos\u002F02.diagramas","i-devicon-uml",{"title":63,"path":64,"stem":65,"icon":45},"Las Clases","\u002Fclases-objetos\u002Fclases","3.clases-objetos\u002F03.clases",{"title":67,"path":68,"stem":69,"icon":45},"Ámbito y Visibilidad","\u002Fclases-objetos\u002Fambito","3.clases-objetos\u002F04.ambito",{"title":71,"path":72,"stem":73,"icon":45},"Declaración e Instanciación de Objetos","\u002Fclases-objetos\u002Fobjetos","3.clases-objetos\u002F05.objetos",{"title":75,"path":76,"stem":77,"icon":45},"Clases Predefinidas en Java","\u002Fclases-objetos\u002Fpredefinidas","3.clases-objetos\u002F06.predefinidas",{"title":79,"path":80,"stem":81,"icon":82},"Paquetes en Java","\u002Fclases-objetos\u002Fpaquetes","3.clases-objetos\u002F07.paquetes","i-material-icon-theme-folder-java-open",{"title":84,"path":85,"stem":86,"icon":87},"Las Excepciones","\u002Fclases-objetos\u002Fexcepciones","3.clases-objetos\u002F08.excepciones","i-catppuccin-java-exception",{"title":89,"path":90,"stem":91,"icon":45},"La clase JOptionPane","\u002Fclases-objetos\u002Fjoptionpane","3.clases-objetos\u002F09.joptionpane",{"title":93,"path":94,"stem":95,"icon":45},"Constructores y Accesores","\u002Fclases-objetos\u002Fconstructores","3.clases-objetos\u002F10.constructores",{"title":97,"path":98,"stem":99,"icon":100},"Tipos Enumerados (Enums)","\u002Fclases-objetos\u002Fenumerados","3.clases-objetos\u002F11.enumerados","i-catppuccin-java-enum",{"title":102,"path":103,"stem":104,"icon":105},"Modificadores de acceso static y final","\u002Fclases-objetos\u002Fmodificadores","3.clases-objetos\u002F12.modificadores","i-mdi-chart-box",{"title":107,"path":108,"stem":109,"icon":105},"El casting en Java","\u002Fclases-objetos\u002Fcasting","3.clases-objetos\u002F13.casting",{"title":111,"path":112,"stem":113},"Las Expresiones Regulares","\u002Fclases-objetos\u002Fexpresiones-regulares","3.clases-objetos\u002F14.expresiones-regulares",{"title":115,"path":116,"stem":117,"icon":105},"Clases Genéricas en Java","\u002Fclases-objetos\u002Fclases-genericas","3.clases-objetos\u002F15.clases-genericas",{"title":119,"icon":120,"path":121,"stem":122,"children":123,"page":42},"Funciones (Métodos)","i-material-symbols-function","\u002Fmetodos","4.metodos",[124,128,132,136,140,144,148,152,156],{"title":125,"path":126,"stem":127},"Funciones Genéricas","\u002Fmetodos\u002Ffuncion-generica","4.metodos\u002F01.funcion-generica",{"title":129,"path":130,"stem":131},"Métodos de Instancia y de Clase","\u002Fmetodos\u002Finstancia-clase","4.metodos\u002F02.instancia-clase",{"title":133,"path":134,"stem":135},"Sobrecarga de Funciones","\u002Fmetodos\u002Fsobrecarga","4.metodos\u002F03.sobrecarga",{"title":137,"path":138,"stem":139},"Alcance de Variables y Métodos","\u002Fmetodos\u002Falcance","4.metodos\u002F04.alcance",{"title":141,"path":142,"stem":143},"Recursividad","\u002Fmetodos\u002Frecursividad","4.metodos\u002F05.recursividad",{"title":145,"path":146,"stem":147},"Puntero this","\u002Fmetodos\u002Fthis","4.metodos\u002F06.this",{"title":149,"path":150,"stem":151},"Los argumentos variables (varargs)","\u002Fmetodos\u002Fvarargs","4.metodos\u002F07.varargs",{"title":153,"path":154,"stem":155},"La clase Arrays","\u002Fmetodos\u002Farrays","4.metodos\u002F08.arrays",{"title":157,"path":158,"stem":159},"Predicados Simples y Compuestos en Java","\u002Fmetodos\u002Fpredicados","4.metodos\u002F09.predicados",{"title":161,"path":162,"stem":163,"children":164,"icon":199},"Herencia","\u002Fherencia","5.herencia\u002F01.index",[165,167,171,175,179,183,187,191,195],{"title":166,"path":162,"stem":163},"¿Qué es la herencia?",{"title":168,"path":169,"stem":170},"Sobreescritura de métodos y uso de `super`","\u002Fherencia\u002Fsobeescritura","5.herencia\u002F02.sobeescritura",{"title":172,"path":173,"stem":174},"Tipos de herencia","\u002Fherencia\u002Ftipos-herencia","5.herencia\u002F03.tipos-herencia",{"title":176,"path":177,"stem":178},"La clase Object en Java","\u002Fherencia\u002Fobject","5.herencia\u002F04.object",{"title":180,"path":181,"stem":182},"Polimorfismo","\u002Fherencia\u002Fpolimorfismo","5.herencia\u002F05.polimorfismo",{"title":184,"path":185,"stem":186},"Clases y Funciones Abstractas","\u002Fherencia\u002Fabstract","5.herencia\u002F06.abstract",{"title":188,"path":189,"stem":190},"Interfaces","\u002Fherencia\u002Finterfaces","5.herencia\u002F07.interfaces",{"title":192,"path":193,"stem":194},"Funciones e Interfaces","\u002Fherencia\u002Ffunciones-interfaces","5.herencia\u002F08.funciones-interfaces",{"title":196,"path":197,"stem":198},"Interfaces y Funciones Lambda","\u002Fherencia\u002Flambda-interface","5.herencia\u002F09.lambda-interface","i-material-symbols-heritage",{"title":201,"path":202,"stem":203,"children":204,"icon":199},"Arreglos","\u002Farreglos","6.arreglos\u002F01.index",[205,207,211,215,219,223,227],{"title":206,"path":202,"stem":203},"Los arreglos en Java",{"title":208,"path":209,"stem":210},"Los arreglos","\u002Farreglos\u002Farray","6.arreglos\u002F02.array",{"title":212,"path":213,"stem":214},"Matrices","\u002Farreglos\u002Fmatrices","6.arreglos\u002F03.matrices",{"title":216,"path":217,"stem":218},"Comparadores","\u002Farreglos\u002Fcomparator","6.arreglos\u002F04.comparator",{"title":220,"path":221,"stem":222},"Arreglos dinámicos: ArrayList","\u002Farreglos\u002Farraylist","6.arreglos\u002F05.arraylist",{"title":224,"path":225,"stem":226},"Arreglos Relacionales: HashMap","\u002Farreglos\u002Fhashmap","6.arreglos\u002F06.hashmap",{"title":228,"path":229,"stem":230},"La clase Stream en Java","\u002Farreglos\u002Fstream","6.arreglos\u002F07.stream",{"title":232,"icon":199,"path":233,"stem":234,"children":235,"page":42},"Archivos e Interfaz de Usuario","\u002Farchivos-ui","7.archivos-ui",[236,240,244,248,252,256,260,264,268,272,276,280,284,288,292,296,300,304,308,312,316],{"title":237,"path":238,"stem":239},"El paquete Swing","\u002Farchivos-ui\u002Fswing","7.archivos-ui\u002F01.swing",{"title":241,"path":242,"stem":243},"La clase JFrame y el JPanel","\u002Farchivos-ui\u002Fjpanel","7.archivos-ui\u002F02.jpanel",{"title":245,"path":246,"stem":247},"Los Layouts en Swing","\u002Farchivos-ui\u002Flayout","7.archivos-ui\u002F03.layout",{"title":249,"path":250,"stem":251},"Iniciando con Swing","\u002Farchivos-ui\u002Finiciando","7.archivos-ui\u002F04.iniciando",{"title":253,"path":254,"stem":255},"Las clases Color y Font en Swing","\u002Farchivos-ui\u002Fcolor-font","7.archivos-ui\u002F05.color-font",{"title":257,"path":258,"stem":259},"Etiquetas en Swing","\u002Farchivos-ui\u002Fetiquetas","7.archivos-ui\u002F06.etiquetas",{"title":261,"path":262,"stem":263},"Personalizando la apariencia de los componentes en Swing","\u002Farchivos-ui\u002Fpersonalizando","7.archivos-ui\u002F07.personalizando",{"title":265,"path":266,"stem":267},"Sobrescribiendo el método drawComponent() en Swing","\u002Farchivos-ui\u002Fdraw","7.archivos-ui\u002F08.draw",{"title":269,"path":270,"stem":271},"Manejando eventos en Swing","\u002Farchivos-ui\u002Feventos","7.archivos-ui\u002F09.eventos",{"title":273,"path":274,"stem":275},"Personalización de Componentes mediante la Extensión de Clases en Swing","\u002Farchivos-ui\u002Fextends-component","7.archivos-ui\u002F10.extends-component",{"title":277,"path":278,"stem":279},"Gradientes","\u002Farchivos-ui\u002Fgradientes","7.archivos-ui\u002F11.gradientes",{"title":281,"path":282,"stem":283},"Botones en Swing","\u002Farchivos-ui\u002Fbotones","7.archivos-ui\u002F12.botones",{"title":285,"path":286,"stem":287},"Los delegadores en Swing","\u002Farchivos-ui\u002Fdelegadores","7.archivos-ui\u002F13.delegadores",{"title":289,"path":290,"stem":291},"UI para nuestro RPG: Parte 1","\u002Farchivos-ui\u002Frpg-ui-1","7.archivos-ui\u002F14.rpg-ui-1",{"title":293,"path":294,"stem":295},"UI para nuestro RPG: Parte 2","\u002Farchivos-ui\u002Frpg-ui-2","7.archivos-ui\u002F15.rpg-ui-2",{"title":297,"path":298,"stem":299},"Los Streams Entrada y Salida","\u002Farchivos-ui\u002Fstreams","7.archivos-ui\u002F16.streams",{"title":301,"path":302,"stem":303},"Archivo tipo Objeto","\u002Farchivos-ui\u002Farchivo-objeto","7.archivos-ui\u002F17.archivo-objeto",{"title":305,"path":306,"stem":307},"UI para nuestro RPG: Parte 3","\u002Farchivos-ui\u002Frpg-ui-3","7.archivos-ui\u002F18.rpg-ui-3",{"title":309,"path":310,"stem":311},"UI para nuestro RPG: Parte 4","\u002Farchivos-ui\u002Frpg-ui-4","7.archivos-ui\u002F19.rpg-ui-4",{"title":313,"path":314,"stem":315},"UI para nuestro RPG: Parte 5","\u002Farchivos-ui\u002Frpg-ui-5","7.archivos-ui\u002F20.rpg-ui-5",{"title":317,"path":318,"stem":319},"UI para nuestro RPG: Parte 6","\u002Farchivos-ui\u002Frpg-ui-6","7.archivos-ui\u002F21.rpg-ui-6",{"title":321,"icon":322,"path":323,"stem":324,"children":325,"page":42},"Ejemplos","i-check-circle","\u002Fejemplos","8.ejemplos",[326,330,334,338,342],{"title":327,"path":328,"stem":329,"icon":105},"Ejemplo 1: Validando entradas con JOptionPane","\u002Fejemplos\u002Fejemplo-01","8.ejemplos\u002F01.ejemplo-01",{"title":331,"path":332,"stem":333},"Ejemplo 02: Uso de clases genéricas en Java","\u002Fejemplos\u002Fejemplo-02","8.ejemplos\u002F02.ejemplo-02",{"title":335,"path":336,"stem":337},"Ejemplo 03: Uso de Enum, Excepciones en Java","\u002Fejemplos\u002Fejemplo-03","8.ejemplos\u002F03.ejemplo-03",{"title":339,"path":340,"stem":341},"Ejemplo 4: Clase con funciones genéricas de validación","\u002Fejemplos\u002Fejemplo-04","8.ejemplos\u002F04.ejemplo-04",{"title":343,"path":344,"stem":345},"Ejemplo 5: Sistema de Gestión de Empleados","\u002Fejemplos\u002Fejemplo-05","8.ejemplos\u002F05.ejemplo-05",{"title":347,"icon":322,"path":348,"stem":349,"children":350,"page":42},"Actividades","\u002Factividades","9.actividades",[351,355,360,364,368,372,376,380,384,388,392,396,400,404,408],{"title":352,"path":353,"stem":354,"icon":105},"Actividad 1: Infografía sobre el proceso de compilación","\u002Factividades\u002Fact-01","9.actividades\u002F01.act-01",{"title":356,"path":357,"stem":358,"icon":359},"Actividad 2: Modelando Diagramas de Clases UML","\u002Factividades\u002Fact-02","9.actividades\u002F02.act-02","i-material-icon-theme-uml",{"title":361,"path":362,"stem":363,"icon":45},"Actividad 3: Creando Clases y Objetos en Java","\u002Factividades\u002Fact-03","9.actividades\u002F03.act-03",{"title":365,"path":366,"stem":367},"Actividad 4: Validando entradas de datos","\u002Factividades\u002Fact-04","9.actividades\u002F04.act-04",{"title":369,"path":370,"stem":371,"icon":105},"Actividad 5: Implementando una clase genérica","\u002Factividades\u002Fact-05","9.actividades\u002F05.act-05",{"title":373,"path":374,"stem":375,"icon":105},"Actividad 6: Expandiendo InputValidator con Predicados y Function","\u002Factividades\u002Fact-06","9.actividades\u002F06.act-06",{"title":377,"path":378,"stem":379,"icon":105},"Actividad 7: Gestor de Biblioteca con InputValidator","\u002Factividades\u002Fact-07","9.actividades\u002F07.act-07",{"title":381,"path":382,"stem":383,"icon":105},"Actividad 8: Calculadora de Figuras Geométricas","\u002Factividades\u002Fact-08","9.actividades\u002F08.act-08",{"title":385,"path":386,"stem":387,"icon":105},"Actividad 9: gestión de una empresa agroalimentaria","\u002Factividades\u002Fact-09","9.actividades\u002F09.act-09",{"title":389,"path":390,"stem":391,"icon":105},"Actividad 10: Sistema de gestión de clínicas veterinarias","\u002Factividades\u002Fact-10","9.actividades\u002F10.act-10",{"title":393,"path":394,"stem":395},"Definición de Proyecto Evolutivo","\u002Factividades\u002Frpg","9.actividades\u002F11.rpg",{"title":397,"path":398,"stem":399},"Actividad 11: Creación de Personajes","\u002Factividades\u002Fact-11","9.actividades\u002F12.act-11",{"title":401,"path":402,"stem":403},"Actividad 12: El Inventario y los Objetos","\u002Factividades\u002Fact-12","9.actividades\u002F13.act-12",{"title":405,"path":406,"stem":407},"Actividad 13: El combate por turnos","\u002Factividades\u002Fact-13","9.actividades\u002F14.act-13",{"title":409,"path":410,"stem":411},"Actividad 14: Guardando y Cargando","\u002Factividades\u002Fact-14","9.actividades\u002F15.act-14",{"id":413,"title":339,"body":414,"description":1500,"extension":1501,"links":1502,"meta":1503,"navigation":465,"path":340,"seo":1504,"stem":341,"__hash__":1505},"docs\u002F8.ejemplos\u002F04.ejemplo-04.md",{"type":415,"value":416,"toc":1495},"minimark",[417,422,426,430,438,1328,1345,1351,1414,1418,1481,1487,1491],[418,419,421],"h2",{"id":420},"descripción-del-problema","Descripción del Problema",[423,424,425],"p",{},"Eres un desarrollador de software que necesita crear una clase en Java para validar diferentes tipos de entradas de usuario. Quieres que esta clase tenga funciones genéricas para validar números enteros, cadenas no vacías, y otros tipos de datos comunes. Además, deseas que estas funciones lancen excepciones personalizadas si la validación falla.",[418,427,429],{"id":428},"solución","Solución",[423,431,432,433,437],{},"Primero, creamos una clase llamada ",[434,435,436],"code",{},"InputValidator"," que contiene funciones genéricas para validar diferentes tipos de entradas.",[439,440,445],"pre",{"className":441,"code":442,"language":443,"meta":444,"style":444},"language-java shiki shiki-themes github-dark","package app.validate;\n\nimport app.validate.exception.InvalidDataException;\n\nimport javax.swing.*;\nimport java.awt.*;\n\npublic class InputValidator {\n\n    private static final Font MESSAGE_FONT = new Font(\"Arial\", Font.PLAIN, 16);\n    private static final Font BUTTON_FONT = new Font(\"Arial\", Font.BOLD, 16);\n    private static final Font INPUT_FONT = new Font(\"Arial\", Font.PLAIN, 14);\n\n    static {\n\n        UIManager.put(\"OptionPane.messageFont\", MESSAGE_FONT);\n        UIManager.put(\"OptionPane.buttonFont\", BUTTON_FONT);\n        UIManager.put(\"TextField.font\", INPUT_FONT);\n        UIManager.put(\"ComboBox.font\", BUTTON_FONT);\n    }\n\n    private static String getInput(String message) {\n\n        return JOptionPane.showInputDialog(null, message);\n    }\n\n    private static void showMessage(String message, String title, int messageType) {\n\n        JOptionPane.showMessageDialog(null, message, title, messageType);\n    }\n\n    public static \u003CT> T validateInput(String message, Class\u003CT> type) throws InvalidDataException {\n\n        String input;\n        T output;\n        if (type.getSimpleName().equals(\"Boolean\")) {\n            boolean confirmed = getConfirmation(message);\n            return type.cast(confirmed);\n        } else {\n            input = getInput(message);\n            try {\n                if (input == null || input.trim().isEmpty()) {\n                    throw new InvalidDataException(\"El campo no puede estar vacío. Por favor, ingrese un valor válido.\");\n                }\n                output = switch (type.getSimpleName()) {\n                    case \"Integer\" -> type.cast(Integer.valueOf(input));\n                    case \"Double\" -> type.cast(Double.valueOf(input));\n                    case \"String\" -> type.cast(input.trim());\n                    default -> throw new InvalidDataException(\"Unsupported data type: \" + type.getSimpleName());\n                };\n            } catch (NumberFormatException e) {\n                showMessage(\"Entrada no válida.\", \"Error de Validación\", JOptionPane.ERROR_MESSAGE);\n                return validateInput(message, type);\n            }\n            return output;\n        }\n    }\n\n    private static boolean getConfirmation(String message) {\n\n        int option = JOptionPane.showConfirmDialog(null, message,\n                \"Confirmación\", JOptionPane.YES_NO_OPTION);\n        return option == JOptionPane.YES_OPTION;\n    }\n}\n","java","",[434,446,447,460,467,476,481,496,508,513,529,534,574,603,632,637,645,650,667,682,697,711,717,722,745,750,770,775,780,814,819,835,840,845,889,894,900,906,932,949,964,975,988,996,1028,1046,1052,1069,1094,1115,1137,1166,1172,1189,1208,1220,1226,1234,1240,1245,1250,1268,1273,1296,1305,1317,1322],{"__ignoreMap":444},[448,449,452,456],"span",{"class":450,"line":451},"line",1,[448,453,455],{"class":454},"snl16","package",[448,457,459],{"class":458},"s95oV"," app.validate;\n",[448,461,463],{"class":450,"line":462},2,[448,464,466],{"emptyLinePlaceholder":465},true,"\n",[448,468,470,473],{"class":450,"line":469},3,[448,471,472],{"class":454},"import",[448,474,475],{"class":458}," app.validate.exception.InvalidDataException;\n",[448,477,479],{"class":450,"line":478},4,[448,480,466],{"emptyLinePlaceholder":465},[448,482,484,486,489,493],{"class":450,"line":483},5,[448,485,472],{"class":454},[448,487,488],{"class":458}," javax.swing.",[448,490,492],{"class":491},"sDLfK","*",[448,494,495],{"class":458},";\n",[448,497,499,501,504,506],{"class":450,"line":498},6,[448,500,472],{"class":454},[448,502,503],{"class":458}," java.awt.",[448,505,492],{"class":491},[448,507,495],{"class":458},[448,509,511],{"class":450,"line":510},7,[448,512,466],{"emptyLinePlaceholder":465},[448,514,516,519,522,526],{"class":450,"line":515},8,[448,517,518],{"class":454},"public",[448,520,521],{"class":454}," class",[448,523,525],{"class":524},"svObZ"," InputValidator",[448,527,528],{"class":458}," {\n",[448,530,532],{"class":450,"line":531},9,[448,533,466],{"emptyLinePlaceholder":465},[448,535,537,540,543,546,549,552,555,558,561,565,568,571],{"class":450,"line":536},10,[448,538,539],{"class":454},"    private",[448,541,542],{"class":454}," static",[448,544,545],{"class":454}," final",[448,547,548],{"class":458}," Font MESSAGE_FONT ",[448,550,551],{"class":454},"=",[448,553,554],{"class":454}," new",[448,556,557],{"class":524}," Font",[448,559,560],{"class":458},"(",[448,562,564],{"class":563},"sU2Wk","\"Arial\"",[448,566,567],{"class":458},", Font.PLAIN, ",[448,569,570],{"class":491},"16",[448,572,573],{"class":458},");\n",[448,575,577,579,581,583,586,588,590,592,594,596,599,601],{"class":450,"line":576},11,[448,578,539],{"class":454},[448,580,542],{"class":454},[448,582,545],{"class":454},[448,584,585],{"class":458}," Font BUTTON_FONT ",[448,587,551],{"class":454},[448,589,554],{"class":454},[448,591,557],{"class":524},[448,593,560],{"class":458},[448,595,564],{"class":563},[448,597,598],{"class":458},", Font.BOLD, ",[448,600,570],{"class":491},[448,602,573],{"class":458},[448,604,606,608,610,612,615,617,619,621,623,625,627,630],{"class":450,"line":605},12,[448,607,539],{"class":454},[448,609,542],{"class":454},[448,611,545],{"class":454},[448,613,614],{"class":458}," Font INPUT_FONT ",[448,616,551],{"class":454},[448,618,554],{"class":454},[448,620,557],{"class":524},[448,622,560],{"class":458},[448,624,564],{"class":563},[448,626,567],{"class":458},[448,628,629],{"class":491},"14",[448,631,573],{"class":458},[448,633,635],{"class":450,"line":634},13,[448,636,466],{"emptyLinePlaceholder":465},[448,638,640,643],{"class":450,"line":639},14,[448,641,642],{"class":454},"    static",[448,644,528],{"class":458},[448,646,648],{"class":450,"line":647},15,[448,649,466],{"emptyLinePlaceholder":465},[448,651,653,656,659,661,664],{"class":450,"line":652},16,[448,654,655],{"class":458},"        UIManager.",[448,657,658],{"class":524},"put",[448,660,560],{"class":458},[448,662,663],{"class":563},"\"OptionPane.messageFont\"",[448,665,666],{"class":458},", MESSAGE_FONT);\n",[448,668,670,672,674,676,679],{"class":450,"line":669},17,[448,671,655],{"class":458},[448,673,658],{"class":524},[448,675,560],{"class":458},[448,677,678],{"class":563},"\"OptionPane.buttonFont\"",[448,680,681],{"class":458},", BUTTON_FONT);\n",[448,683,685,687,689,691,694],{"class":450,"line":684},18,[448,686,655],{"class":458},[448,688,658],{"class":524},[448,690,560],{"class":458},[448,692,693],{"class":563},"\"TextField.font\"",[448,695,696],{"class":458},", INPUT_FONT);\n",[448,698,700,702,704,706,709],{"class":450,"line":699},19,[448,701,655],{"class":458},[448,703,658],{"class":524},[448,705,560],{"class":458},[448,707,708],{"class":563},"\"ComboBox.font\"",[448,710,681],{"class":458},[448,712,714],{"class":450,"line":713},20,[448,715,716],{"class":458},"    }\n",[448,718,720],{"class":450,"line":719},21,[448,721,466],{"emptyLinePlaceholder":465},[448,723,725,727,729,732,735,738,742],{"class":450,"line":724},22,[448,726,539],{"class":454},[448,728,542],{"class":454},[448,730,731],{"class":458}," String ",[448,733,734],{"class":524},"getInput",[448,736,737],{"class":458},"(String ",[448,739,741],{"class":740},"s9osk","message",[448,743,744],{"class":458},") {\n",[448,746,748],{"class":450,"line":747},23,[448,749,466],{"emptyLinePlaceholder":465},[448,751,753,756,759,762,764,767],{"class":450,"line":752},24,[448,754,755],{"class":454},"        return",[448,757,758],{"class":458}," JOptionPane.",[448,760,761],{"class":524},"showInputDialog",[448,763,560],{"class":458},[448,765,766],{"class":491},"null",[448,768,769],{"class":458},", message);\n",[448,771,773],{"class":450,"line":772},25,[448,774,716],{"class":458},[448,776,778],{"class":450,"line":777},26,[448,779,466],{"emptyLinePlaceholder":465},[448,781,783,785,787,790,793,795,797,800,803,806,809,812],{"class":450,"line":782},27,[448,784,539],{"class":454},[448,786,542],{"class":454},[448,788,789],{"class":454}," void",[448,791,792],{"class":524}," showMessage",[448,794,737],{"class":458},[448,796,741],{"class":740},[448,798,799],{"class":458},", String ",[448,801,802],{"class":740},"title",[448,804,805],{"class":458},", ",[448,807,808],{"class":454},"int",[448,810,811],{"class":740}," messageType",[448,813,744],{"class":458},[448,815,817],{"class":450,"line":816},28,[448,818,466],{"emptyLinePlaceholder":465},[448,820,822,825,828,830,832],{"class":450,"line":821},29,[448,823,824],{"class":458},"        JOptionPane.",[448,826,827],{"class":524},"showMessageDialog",[448,829,560],{"class":458},[448,831,766],{"class":491},[448,833,834],{"class":458},", message, title, messageType);\n",[448,836,838],{"class":450,"line":837},30,[448,839,716],{"class":458},[448,841,843],{"class":450,"line":842},31,[448,844,466],{"emptyLinePlaceholder":465},[448,846,848,851,853,856,859,862,865,867,869,872,874,877,880,883,886],{"class":450,"line":847},32,[448,849,850],{"class":454},"    public",[448,852,542],{"class":454},[448,854,855],{"class":458}," \u003C",[448,857,858],{"class":454},"T",[448,860,861],{"class":458},"> T ",[448,863,864],{"class":524},"validateInput",[448,866,737],{"class":458},[448,868,741],{"class":740},[448,870,871],{"class":458},", Class\u003C",[448,873,858],{"class":454},[448,875,876],{"class":458},"> ",[448,878,879],{"class":740},"type",[448,881,882],{"class":458},") ",[448,884,885],{"class":454},"throws",[448,887,888],{"class":458}," InvalidDataException {\n",[448,890,892],{"class":450,"line":891},33,[448,893,466],{"emptyLinePlaceholder":465},[448,895,897],{"class":450,"line":896},34,[448,898,899],{"class":458},"        String input;\n",[448,901,903],{"class":450,"line":902},35,[448,904,905],{"class":458},"        T output;\n",[448,907,909,912,915,918,921,924,926,929],{"class":450,"line":908},36,[448,910,911],{"class":454},"        if",[448,913,914],{"class":458}," (type.",[448,916,917],{"class":524},"getSimpleName",[448,919,920],{"class":458},"().",[448,922,923],{"class":524},"equals",[448,925,560],{"class":458},[448,927,928],{"class":563},"\"Boolean\"",[448,930,931],{"class":458},")) {\n",[448,933,935,938,941,943,946],{"class":450,"line":934},37,[448,936,937],{"class":454},"            boolean",[448,939,940],{"class":458}," confirmed ",[448,942,551],{"class":454},[448,944,945],{"class":524}," getConfirmation",[448,947,948],{"class":458},"(message);\n",[448,950,952,955,958,961],{"class":450,"line":951},38,[448,953,954],{"class":454},"            return",[448,956,957],{"class":458}," type.",[448,959,960],{"class":524},"cast",[448,962,963],{"class":458},"(confirmed);\n",[448,965,967,970,973],{"class":450,"line":966},39,[448,968,969],{"class":458},"        } ",[448,971,972],{"class":454},"else",[448,974,528],{"class":458},[448,976,978,981,983,986],{"class":450,"line":977},40,[448,979,980],{"class":458},"            input ",[448,982,551],{"class":454},[448,984,985],{"class":524}," getInput",[448,987,948],{"class":458},[448,989,991,994],{"class":450,"line":990},41,[448,992,993],{"class":454},"            try",[448,995,528],{"class":458},[448,997,999,1002,1005,1008,1011,1014,1017,1020,1022,1025],{"class":450,"line":998},42,[448,1000,1001],{"class":454},"                if",[448,1003,1004],{"class":458}," (input ",[448,1006,1007],{"class":454},"==",[448,1009,1010],{"class":491}," null",[448,1012,1013],{"class":454}," ||",[448,1015,1016],{"class":458}," input.",[448,1018,1019],{"class":524},"trim",[448,1021,920],{"class":458},[448,1023,1024],{"class":524},"isEmpty",[448,1026,1027],{"class":458},"()) {\n",[448,1029,1031,1034,1036,1039,1041,1044],{"class":450,"line":1030},43,[448,1032,1033],{"class":454},"                    throw",[448,1035,554],{"class":454},[448,1037,1038],{"class":524}," InvalidDataException",[448,1040,560],{"class":458},[448,1042,1043],{"class":563},"\"El campo no puede estar vacío. Por favor, ingrese un valor válido.\"",[448,1045,573],{"class":458},[448,1047,1049],{"class":450,"line":1048},44,[448,1050,1051],{"class":458},"                }\n",[448,1053,1055,1058,1060,1063,1065,1067],{"class":450,"line":1054},45,[448,1056,1057],{"class":458},"                output ",[448,1059,551],{"class":454},[448,1061,1062],{"class":454}," switch",[448,1064,914],{"class":458},[448,1066,917],{"class":524},[448,1068,1027],{"class":458},[448,1070,1072,1075,1078,1081,1083,1085,1088,1091],{"class":450,"line":1071},46,[448,1073,1074],{"class":454},"                    case",[448,1076,1077],{"class":563}," \"Integer\"",[448,1079,1080],{"class":454}," ->",[448,1082,957],{"class":458},[448,1084,960],{"class":524},[448,1086,1087],{"class":458},"(Integer.",[448,1089,1090],{"class":524},"valueOf",[448,1092,1093],{"class":458},"(input));\n",[448,1095,1097,1099,1102,1104,1106,1108,1111,1113],{"class":450,"line":1096},47,[448,1098,1074],{"class":454},[448,1100,1101],{"class":563}," \"Double\"",[448,1103,1080],{"class":454},[448,1105,957],{"class":458},[448,1107,960],{"class":524},[448,1109,1110],{"class":458},"(Double.",[448,1112,1090],{"class":524},[448,1114,1093],{"class":458},[448,1116,1118,1120,1123,1125,1127,1129,1132,1134],{"class":450,"line":1117},48,[448,1119,1074],{"class":454},[448,1121,1122],{"class":563}," \"String\"",[448,1124,1080],{"class":454},[448,1126,957],{"class":458},[448,1128,960],{"class":524},[448,1130,1131],{"class":458},"(input.",[448,1133,1019],{"class":524},[448,1135,1136],{"class":458},"());\n",[448,1138,1140,1143,1145,1148,1150,1152,1154,1157,1160,1162,1164],{"class":450,"line":1139},49,[448,1141,1142],{"class":454},"                    default",[448,1144,1080],{"class":454},[448,1146,1147],{"class":454}," throw",[448,1149,554],{"class":454},[448,1151,1038],{"class":524},[448,1153,560],{"class":458},[448,1155,1156],{"class":563},"\"Unsupported data type: \"",[448,1158,1159],{"class":454}," +",[448,1161,957],{"class":458},[448,1163,917],{"class":524},[448,1165,1136],{"class":458},[448,1167,1169],{"class":450,"line":1168},50,[448,1170,1171],{"class":458},"                };\n",[448,1173,1175,1178,1181,1184,1187],{"class":450,"line":1174},51,[448,1176,1177],{"class":458},"            } ",[448,1179,1180],{"class":454},"catch",[448,1182,1183],{"class":458}," (NumberFormatException ",[448,1185,1186],{"class":740},"e",[448,1188,744],{"class":458},[448,1190,1192,1195,1197,1200,1202,1205],{"class":450,"line":1191},52,[448,1193,1194],{"class":524},"                showMessage",[448,1196,560],{"class":458},[448,1198,1199],{"class":563},"\"Entrada no válida.\"",[448,1201,805],{"class":458},[448,1203,1204],{"class":563},"\"Error de Validación\"",[448,1206,1207],{"class":458},", JOptionPane.ERROR_MESSAGE);\n",[448,1209,1211,1214,1217],{"class":450,"line":1210},53,[448,1212,1213],{"class":454},"                return",[448,1215,1216],{"class":524}," validateInput",[448,1218,1219],{"class":458},"(message, type);\n",[448,1221,1223],{"class":450,"line":1222},54,[448,1224,1225],{"class":458},"            }\n",[448,1227,1229,1231],{"class":450,"line":1228},55,[448,1230,954],{"class":454},[448,1232,1233],{"class":458}," output;\n",[448,1235,1237],{"class":450,"line":1236},56,[448,1238,1239],{"class":458},"        }\n",[448,1241,1243],{"class":450,"line":1242},57,[448,1244,716],{"class":458},[448,1246,1248],{"class":450,"line":1247},58,[448,1249,466],{"emptyLinePlaceholder":465},[448,1251,1253,1255,1257,1260,1262,1264,1266],{"class":450,"line":1252},59,[448,1254,539],{"class":454},[448,1256,542],{"class":454},[448,1258,1259],{"class":454}," boolean",[448,1261,945],{"class":524},[448,1263,737],{"class":458},[448,1265,741],{"class":740},[448,1267,744],{"class":458},[448,1269,1271],{"class":450,"line":1270},60,[448,1272,466],{"emptyLinePlaceholder":465},[448,1274,1276,1279,1282,1284,1286,1289,1291,1293],{"class":450,"line":1275},61,[448,1277,1278],{"class":454},"        int",[448,1280,1281],{"class":458}," option ",[448,1283,551],{"class":454},[448,1285,758],{"class":458},[448,1287,1288],{"class":524},"showConfirmDialog",[448,1290,560],{"class":458},[448,1292,766],{"class":491},[448,1294,1295],{"class":458},", message,\n",[448,1297,1299,1302],{"class":450,"line":1298},62,[448,1300,1301],{"class":563},"                \"Confirmación\"",[448,1303,1304],{"class":458},", JOptionPane.YES_NO_OPTION);\n",[448,1306,1308,1310,1312,1314],{"class":450,"line":1307},63,[448,1309,755],{"class":454},[448,1311,1281],{"class":458},[448,1313,1007],{"class":454},[448,1315,1316],{"class":458}," JOptionPane.YES_OPTION;\n",[448,1318,1320],{"class":450,"line":1319},64,[448,1321,716],{"class":458},[448,1323,1325],{"class":450,"line":1324},65,[448,1326,1327],{"class":458},"}\n",[423,1329,1330,1331,1333,1334,1336,1337,1340,1341,1344],{},"En este código, la clase ",[434,1332,436],{}," tiene una función genérica ",[434,1335,864],{}," que toma un mensaje y un tipo de dato. Dependiendo del tipo de dato, la función valida la entrada del usuario y lanza una excepción personalizada ",[434,1338,1339],{},"InvalidDataException"," si la validación falla. Además, hay una función ",[434,1342,1343],{},"getConfirmation"," para manejar entradas booleanas a través de un cuadro de diálogo de confirmación.",[423,1346,1347,1348,1350],{},"También es importante crear la excepción personalizada ",[434,1349,1339],{}," para manejar los casos de validación fallida.",[439,1352,1354],{"className":441,"code":1353,"language":443,"meta":444,"style":444},"package app.validate.exception;\n\npublic class InvalidDataException extends Exception {\n\n    public InvalidDataException(String message) {\n        super(message);\n    }\n}\n",[434,1355,1356,1363,1367,1383,1387,1399,1406,1410],{"__ignoreMap":444},[448,1357,1358,1360],{"class":450,"line":451},[448,1359,455],{"class":454},[448,1361,1362],{"class":458}," app.validate.exception;\n",[448,1364,1365],{"class":450,"line":462},[448,1366,466],{"emptyLinePlaceholder":465},[448,1368,1369,1371,1373,1375,1378,1381],{"class":450,"line":469},[448,1370,518],{"class":454},[448,1372,521],{"class":454},[448,1374,1038],{"class":524},[448,1376,1377],{"class":454}," extends",[448,1379,1380],{"class":524}," Exception",[448,1382,528],{"class":458},[448,1384,1385],{"class":450,"line":478},[448,1386,466],{"emptyLinePlaceholder":465},[448,1388,1389,1391,1393,1395,1397],{"class":450,"line":483},[448,1390,850],{"class":454},[448,1392,1038],{"class":524},[448,1394,737],{"class":458},[448,1396,741],{"class":740},[448,1398,744],{"class":458},[448,1400,1401,1404],{"class":450,"line":498},[448,1402,1403],{"class":491},"        super",[448,1405,948],{"class":458},[448,1407,1408],{"class":450,"line":510},[448,1409,716],{"class":458},[448,1411,1412],{"class":450,"line":515},[448,1413,1327],{"class":458},[418,1415,1417],{"id":1416},"analizando-el-código","Analizando el Código",[1419,1420,1421,1428,1470,1476],"ul",{},[1422,1423,1424,1425,1427],"li",{},"La clase ",[434,1426,436],{}," contiene funciones para validar diferentes tipos de entradas.",[1422,1429,1430,1431,1433,1434,805,1437,805,1440,1443,1444,1447,1448],{},"La función ",[434,1432,864],{}," es genérica y puede manejar diferentes tipos de datos, como ",[434,1435,1436],{},"Integer",[434,1438,1439],{},"Double",[434,1441,1442],{},"String",", y ",[434,1445,1446],{},"Boolean",".\n",[1419,1449,1450,1453,1456,1459],{},[1422,1451,1452],{},"Para tipos numéricos, se intenta convertir la entrada a su tipo correspondiente y se lanza una excepción si la conversión falla.",[1422,1454,1455],{},"Para cadenas, se verifica que no estén vacías.",[1422,1457,1458],{},"Para booleanos, se utiliza un cuadro de diálogo de confirmación.",[1422,1460,1461,1462,1465,1466,1469],{},"Nota como en cada tipo usamos la función ",[434,1463,1464],{},"type.cast()"," para convertir la entrada al tipo genérico especificado y el correspondiente ",[434,1467,1468],{},"Wrapper"," para manejar la conversión.",[1422,1471,1472,1473,1475],{},"Si la entrada no es válida, se lanza una excepción personalizada ",[434,1474,1339],{}," con un mensaje descriptivo.",[1422,1477,1430,1478,1480],{},[434,1479,1343],{}," se utiliza para validar entradas booleanas mediante un cuadro de diálogo de confirmación.",[423,1482,1483,1484,1486],{},"Con esta implementación, puedes utilizar la clase ",[434,1485,436],{}," para validar diferentes tipos de entradas en tu aplicación, y manejar los errores de validación de manera efectiva utilizando excepciones personalizadas.",[1488,1489,1490],"note",{},"Este ejemplo se centra en la validación de entradas utilizando funciones genéricas y excepciones personalizadas. Puedes expandir esta clase para incluir más tipos de validación según tus necesidades.",[1492,1493,1494],"style",{},"html pre.shiki code .snl16, html code.shiki .snl16{--shiki-default:#F97583}html pre.shiki code .s95oV, html code.shiki .s95oV{--shiki-default:#E1E4E8}html pre.shiki code .sDLfK, html code.shiki .sDLfK{--shiki-default:#79B8FF}html pre.shiki code .svObZ, html code.shiki .svObZ{--shiki-default:#B392F0}html pre.shiki code .sU2Wk, html code.shiki .sU2Wk{--shiki-default:#9ECBFF}html pre.shiki code .s9osk, html code.shiki .s9osk{--shiki-default:#FFAB70}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":444,"searchDepth":462,"depth":462,"links":1496},[1497,1498,1499],{"id":420,"depth":462,"text":421},{"id":428,"depth":462,"text":429},{"id":1416,"depth":462,"text":1417},"En este ejemplo, crearemos una clase `InputValidator` que contiene funciones genéricas para validar diferentes tipos de entradas, como números enteros, correos electrónicos y fechas. Estas funciones lanzarán excepciones personalizadas si la validación falla.","md",null,{"editButton":42},{"title":339,"description":1500},"fGUCODWzhfsUs5pAw6kh6bq4bvkpI-gCzm9eew3HCGE",[1507,1509],{"title":335,"path":336,"stem":337,"description":1508,"children":-1},"En este ejemplo, se muestra cómo utilizar enumeraciones (Enum) y manejo de excepciones en Java para crear un programa que maneje diferentes tipos de errores de manera eficiente.",{"title":343,"path":344,"stem":345,"description":1510,"children":-1},"Implementación de un sistema de gestión de empleados utilizando validación de datos con JOptionPane.",1779479576904]