Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Wrapper knihovní třídy

Zdravím,
v projektu ohledně kalendářových dat využívám knihovnu iCal4j, zejména třídu VEvent. Tato třída neimplementuje rozhraní Comparable, tudíž nemá metodu compareTo, kterou bych potřeboval, abych mohl VEventy ukládat do řazeného TreeSetu.
Pokud si napíšu wrapper MyEvent extends VEvent, implementuji Comparable, tak dostávám výjimku:
Exception in thread "main" java.lang.ClassCastException: net.fortuna.ical4j.model.component.VEvent cannot be cast to MyEvent.
Ta je vyhazována na řádce, kde se pokouším přetypovat VEvent na MyEvent.
Hlavička MyEventu:
public class MyEvent extends VEvent implements Comparable<MyEvent>

Jak toto vyřešit / obejít? Díky

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
Ta je vyhazována na řádce, kde se pokouším přetypovat VEvent na MyEvent. mozes sem dat ten riadok?…
MM.. 29.05.2013 21:28
MM..
public static TreeSet<MyEvent> loadEvents(InputStreamReader input) throws IOException, ParserExcepti…
freez2 29.05.2013 21:33
freez2
Takze tie VEvent objekty sa vytvoria v tom new CalendarBuilder() a nemozes nijak ovplyvnit aby v tom…
MM.. 29.05.2013 21:44
MM..
Jo, ty komponenty vytváří už CalendarBuilder sám a neovlivním to.
freez2 29.05.2013 22:02
freez2
No ovlivnis to ked zmenis ten CalendarBuilder kdesi v jeho zdrojakoch :) (resp. to si tam potom rovn…
MM.. 29.05.2013 23:44
MM..
To už si myslím, že je proti licenci, nebo?
freez2 29.05.2013 23:45
freez2
Ale to co pisal nizsie MaSo je asi najjednoduchsie. Ak ti nevadi ze tie data mas na 2 miestach (raz…
MM.. 29.05.2013 23:54
MM..
Nevadí, na přehlednosti si myslím, že to nestrádá. nový
freez2 29.05.2013 23:56
freez2
Jsou to reference, takže v tom bych problém neviděl...;-) nový
MaSo 30.05.2013 09:27
MaSo
Reference to snad neni, vytvaras si vlastny objekt. Keby to bola reference tak je cela java na hlavu… nový
MM.. 30.05.2013 11:19
MM..
Přesně tak, zkopíruješ referenci, ne objekt... barva se změní v obou autech. Mě to přijde docela log… nový
freez2 30.05.2013 11:30
freez2
pretoze si vytvoril 2 objekty. Prvy zapis (AUTO Auto1;) vytvoril pamatove miesto pre data, druhy STE… nový
MM.. 30.05.2013 11:32
MM..
Auto auto1, auto2; V Javě znamená: Auto auto1 = null; Auto auto2 = null; :-) nový
MaSo 30.05.2013 11:46
MaSo
takto (C++ zapis): Auto *auto1 = null; Auto *auto2 = null; Prave tou * poviem ze co presne chcem od… nový
MM.. 30.05.2013 11:57
MM..
resp. tak jak to popisujete tak mi tam asi chyba riadok Auto1 = new AUTO; ? Potom ok je to determini… nový
MM.. 30.05.2013 12:03
MM..
Jo, chybí tam volání konstruktoru, to jsem si ani nevšiml...:) poslední
MaSo 30.05.2013 12:08
MaSo
A navyse potom musis riesit taketo hovadiny http://stackoverflow.com/questions/3144673/java-ob ject-… nový
MM.. 30.05.2013 11:39
MM..
Ano. V Javě jsou všechno reference (kromě primitivních typů), když chceš deepcopy, tak si musíš vytv… nový
MaSo 30.05.2013 11:37
MaSo
public static TreeSet<MyEvent> loadEvents(InputStreamReader input) throws IOException, ParserException{
		TreeSet<MyEvent> events = new TreeSet<MyEvent>();
		CalendarBuilder builder = new CalendarBuilder();
		Calendar calendar = builder.build(input);
		ComponentList cl = calendar.getComponents(Component.VEVENT);
		MyEvent event;
		//String summary;
		//Property property;
		for(int i = 0 ; i < cl.size() ; i++){
			event = (MyEvent) cl.get(i);
			//summary = event.getProperty(Property.SUMMARY).getValue();
			//System.out.print(summary);
			//property = event.getProperty(Property.RRULE);
			//if(property != null){

			//}
			//System.out.println(event.toString());
			events.add(event);
		}
		return events;
	}

Výjimka je vyhazována na první řádce v cyklu.
cl.get(i) vrací objekt typu Object

Reference to snad neni, vytvaras si vlastny objekt. Keby to bola reference tak je cela java na hlavu (mozno je, preto ma nezaujima :D). Jak by si potom skopiroval objekt a menil len skopirovany?
P.S. napr.
AUTO Auto1, Auto2;
Auto1.znacka=Skoda;
Auto1.farba=Cervena;
Auto2=Auto1;
Auto2.farba=Modra;
- tvrdis ze v jave sa tym zmenil aj Auto1? (potom povazujem javu za uplne na hlavu :)

takto (C++ zapis):
Auto *auto1 = null;
Auto *auto2 = null;
Prave tou * poviem ze co presne chcem od toho kramu, preto je C++ deterministicke ;) Ok tak uz viem ze v jave su len smerniky a miesto pre data alokuje nejaky duch nahodne, este par diskusii a budem moct robit aj v jave ;DD

Ano. V Javě jsou všechno reference (kromě primitivních typů), když chceš deepcopy, tak si musíš vytvořit nový objekt přes konstruktor a fieldy překopírovat ručně...

Zpět do poradny Odpovědět na původní otázku Nahoru