Just nu i M3-nätverket
Gå till innehåll

Javakrock?


Grön Prick

Rekommendera Poster

Grön Prick

Håller på att testa JSP-sidor i JRun4.

 

Av någon anledning kan jag inte skapa vissa objekt när jag inkluderat både java.util.* och java.sql.* i JSP-sidan.

 

Får t.ex. "Error: Type Date is imported on demand from package java/util and package java/sql." när jag försöker skapa ett datumobjekt.

 

Plockar jag bort java.sql.* från importdirektivet så går det bra.

 

Vad är det som händer?

 

Länk till kommentar
Dela på andra webbplatser

Om du bara importerar paket och sedan skapar instanser av klasser utan att specifiera så kan det ju bli namnkrockar om flera paket har en klass med samma namn.

 

Sättet att fixa detta på är ju att använda hela paket namnet, tex:

 

java.util.Date d = new java.util.Date();

 

Men om du bara kör:

 

Date d = new Date();

 

hur ska JVM:en veta vad du vill ha om det finns flera Date klasser ?

 

[inlägget ändrat 2003-03-11 09:23:12 av qwerty99]

Länk till kommentar
Dela på andra webbplatser

Grön Prick

Ok, men jag kör samma JSP-sidor på en budgetversion av Weblogic idag, utan att felet uppstår. Vad är skillnaden?

 

 

 

Länk till kommentar
Dela på andra webbplatser

Jag skulle vilja påstå att Weblogic i så fall gör fel.

 

Det vore intressant att veta vad följande ger för output i Weblogic om det är som du säger:

 

<%

Date d=new Date();

out.println(d.getClass().getName());

%>

 

Red: Typo

[inlägget ändrat 2003-03-11 09:32:17 av fhe]

Länk till kommentar
Dela på andra webbplatser

Hur då gör fel ? Om man importerar två paket med wildcard och båda innehåller en Date klass, hur ska någon JVM någonsin kunna veta vad han menar med Date d = new Date() ?

 

Visserligen kan han väl ta den första han stöter på men det skulle ge ganska oförutsägbar kod med märkliga buggar som resultat, alltså får man ett felmeddelande vilket är det rätta sättet.

 

Att det alls kan fungera på vissa versioner verkar märkligt.

 

Länk till kommentar
Dela på andra webbplatser

Grön Prick

Hmm, har testat och jag blir inte riktigt klok.

 

På Weblogic kan jag skapa Date-objektet utan att inkludera något javapaket. Verkar som att den automatiskt hittar java.util.Date. Fel uppstår nämligen om jag bara inkluderar java.sql.*.

 

Länk till kommentar
Dela på andra webbplatser

Hur då gör fel ? Om man importerar två paket med wildcard och båda innehåller en Date klass, hur ska någon JVM någonsin kunna veta vad han menar med Date d = new Date()?

 

Det kan ingen kompilator veta(för det är kompilatorn det handlar om, inte JVM:en). Det är just därför det är fel av den om den gissar. Resultatet av en gissning kan ju bli både rätt och fel och användaren har egentligen ingen aning om vilket.

Det enda rätta i just det där fallet borde vara att ge användaren ett fel i stil med

Ambiguous class: java.util.Date and java.sql.Date

 

Jag har ingen WebLogic i närheten just nu men jag måste säga att jag har väldigt svårt att tro att weblogic skulle göra just ett sånt fel.

 

Länk till kommentar
Dela på andra webbplatser

Nu får du bestämma dig, importerar du eller inte... :-)

 

Att java.util.* default-importeras är inte omöjligt (även om jag tror det är ett avsteg från specarna, jag vill minnas att Tomcat slutade med det i samband med version 3.2 med just den motiveringen).

 

Om den default-importerar java.util.* och du importerar java.sql.* så gör Weblogic helt rätt om den ger dig ett fel när du är för vag i din beskrivning av vilken Date du vill ha.

 

jag kör samma JSP-sidor på en budgetversion av Weblogic idag, utan att felet uppstår. Vad är skillnaden?

 

Fast ovan ser det verkligen ut som om du inte får felet i Weblogic, det kan inte vara lite sbs inblandat?

 

 

[inlägget ändrat 2003-03-11 10:15:07 av fhe]

Länk till kommentar
Dela på andra webbplatser

Grön Prick

Ja, du har rätt. Jag har fel.

 

När jag testade nu fick jag precis det felet du anger. Måste kolla igenom koden på dom andra sidorna och se hur det egentligen är kodat.

 

Men hur kommer det sig då att den automatiskt hittar java.util.Date utan att jag ens behöver inkludera paketet?

 

Länk till kommentar
Dela på andra webbplatser

Grön Prick

Okejrå, det var väl inte e-x-a-k-t samma sida...men väldigt lika var dom ;-)

 

Tack för hjälpen iallafall...

 

Länk till kommentar
Dela på andra webbplatser

Men hur kommer det sig då att den automatiskt hittar java.util.Date utan att jag ens behöver inkludera paketet?

 

Antaligen har Bea tyckt att "Nästan alla vill ju alltid använda saker i java.util.* så det är lika bra att slänga in en import java.util.* i den genererade koden".

 

Bekvämt men tveksamt om det är rätt (jag orkar inte gräva fram specar, men jag är rätt säker på att det är fel).

 

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...