Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

🍆💦 #3

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
74 changes: 37 additions & 37 deletions pom.xml
Original file line number Diff line number Diff line change
@@ -1,38 +1,38 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>org.example</groupId>
<artifactId>PRO4</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.9.0</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.22</version>
</dependency>
<dependency>
<groupId>org.reflections</groupId>
<artifactId>reflections</artifactId>
<version>0.10.2</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.3.22</version>
</dependency>
</dependencies>

<properties>
<maven.compiler.source>16</maven.compiler.source>
<maven.compiler.target>16</maven.compiler.target>
</properties>

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>PRO4</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.9.0</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.22</version>
</dependency>
<dependency>
<groupId>org.reflections</groupId>
<artifactId>reflections</artifactId>
<version>0.10.2</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.3.22</version>
</dependency>
</dependencies>
<properties>
<maven.compiler.source>16</maven.compiler.source>
<maven.compiler.target>16</maven.compiler.target>
</properties>
</project>
Original file line number Diff line number Diff line change
@@ -1,29 +1,29 @@
package cz.spsmb.ctvrtak.a_promenny_pocet_argumentu_metod;

import java.util.Arrays;

/***
* Java umožňuje definovat metody, které můžeme pokaždé volat s jiným počtem argumentů, přestože
* se počet jejich parametrů nezmění.
* Chceme-li definovat metodu s proměnným počtem argumentů, je potřeba definovat společný typ argumentů,
* jejichž počet předem neznáme. V seznamu parametrů tento typ uvádíme jako poslední a připíšeme za něj
* tzv. "výpustku" v podobě tří teček.
* Tento proměnný počet argumentů je reprezentován obyčejným jednorozměrným polem.
*
*/
public class AUvod {
public static void variant(String title, int... args) {
int count = args.length;
System.out.println(count + " volitelných argumentů pro " + title);
System.out.println("Argumenty: " + Arrays.toString(args));
}

public static void main(String[] args) {
// může být i nulový počet argumentů
variant("Nic");
variant("pět", 1, 2, 3, 4, 5);
// mohu zadat i pole jako argumenty
int[] a = {5, 4, 3, 2, 1};
variant("dalsi", a);
}
}
package cz.spsmb.ctvrtak.a_promenny_pocet_argumentu_metod;
import java.util.Arrays;
/***
* Java umožňuje definovat metody, které můžeme pokaždé volat s jiným počtem argumentů, přestože
* se počet jejich parametrů nezmění.
* Chceme-li definovat metodu s proměnným počtem argumentů, je potřeba definovat společný typ argumentů,
* jejichž počet předem neznáme. V seznamu parametrů tento typ uvádíme jako poslední a připíšeme za něj
* tzv. "výpustku" v podobě tří teček.
* Tento proměnný počet argumentů je reprezentován obyčejným jednorozměrným polem.
*
*/
public class AUvod {
public static void variant(String title, int... args) {
int count = args.length;
System.out.println(count + " volitelných argumentů pro " + title);
System.out.println("Argumenty: " + Arrays.toString(args));
}
public static void main(String[] args) {
// může být i nulový počet argumentů
variant("Nic");
variant("pět", 1, 2, 3, 4, 5);
// mohu zadat i pole jako argumenty
int[] a = {5, 4, 3, 2, 1};
variant("dalsi", a);
}
}
Original file line number Diff line number Diff line change
@@ -1,28 +1,28 @@
package cz.spsmb.ctvrtak.a_promenny_pocet_argumentu_metod;

import java.util.ArrayList;

/***
* Není možné vytvářet pole s prvky typového parametru ani parametrizovaného typu, i když je můžeme
* deklarovat jako typ vytvářené proměnné. Pokus o vytvoření pole generického typu vyvolá syntaktickou
* chybu, a to přesto, že pole instancí surového typu vytvořit lze.
*/
public class BGenerikaAPole {
public static void main(String[] args) {
//Diamantový operátor - nelze:
//ArrayList<String>[] listS = new ArrayList<>[5];

//Explicitní uvedení typu - nelze:
//ArrayList<String>[] listS = new ArrayList<String>[5];

//Pole surových typů - lze, ale přicházíme o typovou kontrolu:
//ArrayList[] listS = new ArrayList[5];

// Pole je deklarováno jako generické, ale má přiřazené instance surového typu - lze, ale vypíše varování:
ArrayList<String>[] listS2 = new ArrayList[5];
//Důležité je, že to funguje:
listS2[0] = new ArrayList<String>();
//Nelze
//listS2[1] = new ArrayList<Integer>();
}
}
package cz.spsmb.ctvrtak.a_promenny_pocet_argumentu_metod;
import java.util.ArrayList;
/***
* Není možné vytvářet pole s prvky typového parametru ani parametrizovaného typu, i když je můžeme
* deklarovat jako typ vytvářené proměnné. Pokus o vytvoření pole generického typu vyvolá syntaktickou
* chybu, a to přesto, že pole instancí surového typu vytvořit lze.
*/
public class BGenerikaAPole {
public static void main(String[] args) {
//Diamantový operátor - nelze:
//ArrayList<String>[] listS = new ArrayList<>[5];
//Explicitní uvedení typu - nelze:
//ArrayList<String>[] listS = new ArrayList<String>[5];
//Pole surových typů - lze, ale přicházíme o typovou kontrolu:
//ArrayList[] listS = new ArrayList[5];
// Pole je deklarováno jako generické, ale má přiřazené instance surového typu - lze, ale vypíše varování:
ArrayList<String>[] listS2 = new ArrayList[5];
//Důležité je, že to funguje:
listS2[0] = new ArrayList<String>();
//Nelze
//listS2[1] = new ArrayList<Integer>();
}
}
Original file line number Diff line number Diff line change
@@ -1,27 +1,27 @@
package cz.spsmb.ctvrtak.a_promenny_pocet_argumentu_metod;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class CPromennyPocetArgumentuAParametrickeTypy {
/***
* Takto obdržíme varovné hlášení. To lze potlačit anotací @SuppressWarnings("unchecked"),
* nicméně pro tento případ byla vytvořena anotace @SafeVarargs
* @param lists
*/
public static void mtd(List<String>... lists){

}
@SafeVarargs
public static void m(List<String>... stringLists){ //není bezpečné
Object[] array = stringLists;
List<Integer> tmpList = Arrays.asList(42);
array[0] = tmpList; //sémanticky špatně, překlad však proběhne bez problémů
String s = stringLists[0].get(0); // Dostáváme CastClassException za běhu v silně typovaném jazyce !

}
public static void main(String[] args) {
m(new ArrayList<String>(), new ArrayList<String>());
}
}
package cz.spsmb.ctvrtak.a_promenny_pocet_argumentu_metod;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class CPromennyPocetArgumentuAParametrickeTypy {
/***
* Takto obdržíme varovné hlášení. To lze potlačit anotací @SuppressWarnings("unchecked"),
* nicméně pro tento případ byla vytvořena anotace @SafeVarargs
* @param lists
*/
public static void mtd(List<String>... lists){
}
@SafeVarargs
public static void m(List<String>... stringLists){ //není bezpečné
Object[] array = stringLists;
List<Integer> tmpList = Arrays.asList(42);
array[0] = tmpList; //sémanticky špatně, překlad však proběhne bez problémů
String s = stringLists[0].get(0); // Dostáváme CastClassException za běhu v silně typovaném jazyce !
}
public static void main(String[] args) {
m(new ArrayList<String>(), new ArrayList<String>());
}
}
Original file line number Diff line number Diff line change
@@ -1,27 +1,27 @@
package cz.spsmb.ctvrtak.a_promenny_pocet_argumentu_metod;

import java.util.ArrayList;

/***
* Díky anotaci @SafeVarargs nyní můžeme vytvořit doposud zakázaná pole. Stačí definovat metodu s proměnným počtem
* argumentů a pole stěmito argumenty pak vrátit jako funkční hodnotu.
*/
public class DVytvoreniPoleSGenerickymiInstancemi {
@SafeVarargs
public static <E> E[] arrayOf(E... array){
return array;
}

public static void main(String[] args) {
var aint = arrayOf(1, 2, 3, 5, 7, 11);
var astr = arrayOf("raz", "dva", "tři");
var abool = arrayOf(true, false, false);
var alist = arrayOf(new ArrayList<Integer>(), new ArrayList<String>(), new ArrayList<Object>());

// U takto vytvořeného pole překladač nekontroluje typ přiřazované hodnoty. tj. následující kód vede k chybě
// v runtime:
Object[] oo = aint;
oo[0] = "NULA";
}

}
package cz.spsmb.ctvrtak.a_promenny_pocet_argumentu_metod;
import java.util.ArrayList;
/***
* Díky anotaci @SafeVarargs nyní můžeme vytvořit doposud zakázaná pole. Stačí definovat metodu s proměnným počtem
* argumentů a pole stěmito argumenty pak vrátit jako funkční hodnotu.
*/
public class DVytvoreniPoleSGenerickymiInstancemi {
@SafeVarargs
public static <E> E[] arrayOf(E... array){
return array;
}
public static void main(String[] args) {
var aint = arrayOf(1, 2, 3, 5, 7, 11);
var astr = arrayOf("raz", "dva", "tři");
var abool = arrayOf(true, false, false);
var alist = arrayOf(new ArrayList<Integer>(), new ArrayList<String>(), new ArrayList<Object>());
// U takto vytvořeného pole překladač nekontroluje typ přiřazované hodnoty. tj. následující kód vede k chybě
// v runtime:
Object[] oo = aint;
oo[0] = "NULA";
}
}
20 changes: 10 additions & 10 deletions src/main/java/cz/spsmb/ctvrtak/b_anotace/A.java
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
package cz.spsmb.ctvrtak.b_anotace;

import java.lang.annotation.Target;

import static java.lang.annotation.ElementType.PARAMETER;
import static java.lang.annotation.ElementType.TYPE_PARAMETER;

@Target({PARAMETER, TYPE_PARAMETER})
public @interface A {
}
package cz.spsmb.ctvrtak.b_anotace;
import java.lang.annotation.Target;
import static java.lang.annotation.ElementType.PARAMETER;
import static java.lang.annotation.ElementType.TYPE_PARAMETER;
@Target({PARAMETER, TYPE_PARAMETER})
public @interface A {
}
Loading