- Monitorkalibráló eszközök
- Samsung LCD és LED TV-k
- Intel Core i5 / i7 / i9 "Alder Lake-Raptor Lake/Refresh" (LGA1700)
- Hisense LCD és LED TV-k
- TCL LCD és LED TV-k
- Milyen egeret válasszak?
- HTPC (házimozi PC) topik
- Azonnali notebookos kérdések órája
- Szünetmentes tápegységek (UPS)
- NVIDIA GeForce RTX 3080 / 3090 / Ti (GA102)
Új hozzászólás Aktív témák
-
Szmeby
tag
Azért mindennek van határa!
A stream api és a lambdák nem azért léteznek, hogy másképp is lehessen for ciklust írni.Azért használunk steam apit, mert komplexebb műveleteket is egységbe zár, kis túlzással atomi műveletként tudunk rá tekinteni. Más szóval nincs mellékhatása, ezért szeretjük. Nyilván, ha valaki nem jól használja, akkor lehet mellékhatása, és néhány esetben a fordító meg is fogja ezeket a hibákat, ahogy az látható. Sajnos más esetekben nem fogja meg. Ez szintén látható a legutolsó kinyilatkoztatásból.
Mellékhatásnak tekintünk minden olyan változást a futó program állapotában, ami a monadon (az az egység amin pl. a stream műveleteket alkalmazod) kívül történik. Ezt most jó hülyén fogalmaztam meg, remélem érthető. Tehát az, hogy például a foreach-en (mapen, filteren, stbn) belül egy akármilyen azon kívül eső változó értékét buzeráljuk, az mellékhatás. A lambda nem nyúlhat a saját scope-ján kívül. Elméletben. Gyakorlatban persze meg lehet tenni, csak igénytelen kódot eredményez. Mellékhatásokkal. Értelmét veszti az egész koncepció. Nem véletlenül ragaszkodik a fordító is ahhoz, hogy final dolgok legyenek a lambdában behivatkozva. Final, tehát nem változtatható. Egyszer értéket kap és úgy marad. Ha neked nem így struktúrált a kódod, akkor nem a lambda a jó megoldás. Vagy átstruktúrálod úgy, hogy jó legyen, ez már egyéni preferencia kérdése.
Légyszives ismerkedjetek meg a monad fogalmával, mielőtt ilyen gusztustalan bűnöket követtek el.
Addig meg légyszi maradjatok a for ciklusnál. Az tökéletesen fog működni. Mert annak nem célja a mellékhatások kiküszöbölése. Bár nem néztem át tüzetesen a problémás kódot, de a hiba környékén lévő szándék számomra azt mutatja, hogy ott a for ciklus a gyors megoldás. -
Taoharcos
aktív tag
válasz
Csaby25 #10995 üzenetére
Nem túl szép, de talán így:
values.forEach(value -> {
Student studentInner = student;
studentInner = populateStudent(value);
});
values.forEach(value -> {
Mark markInner = mark;
markInner = populateMark(value);
});
Esetleg még az elején a Student, Subject, Mark -t inicializálni; -
Csaby25
őstag
Sziasztok!
A következő metódus csv file-ból olvas ki sorokat és objektummá alakítom (minden sor egy objektum):private static void readData(File inputFile, Class type) {
try {
BufferedReader reader = new BufferedReader(new FileReader(inputFile));
String line;
// Reading first line..
while ((line = reader.readLine()) != null) {
String[] values = line.split(COMMA_DELIMITER);
if (type == Student.class) {
Student student = populateStudent(values);
if (students == null) {
students = new HashMap<Integer, Student>();
}
students.put(student.getStudentId(), student);
}
if (type == Subject.class) {
Mark mark = populateMark(values);
Subject subject = populateSubject(values);
if (subject.getMarks() == null) {
subject.setMarks(new ArrayList<Mark>());
}
students.get(mark.getStudentId()).getSubjects().put(subject.getSubjectId(), subject);
students.get(mark.getStudentId()).getSubjects().get(subject.getSubjectId()).getMarks().add(mark);
}
}
reader.close();
} catch (Exception e) {
e.printStackTrace();
}
}
Ez szeretném megoldani Stream-el:
private static void readData(Path inputFile, Class type) {
Student student;
Subject subject;
Mark mark;
try {
Stream<String> lines = Files.lines(inputFile);
List<List<String>> values = lines.map(line -> Arrays.asList(line.split(COMMA_DELIMITER))).collect(Collectors.toList());
if (type == Student.class) {
values.forEach(value -> student = populateStudent(value));
if (students == null) {
students = new HashMap<Integer, Student>();
}
students.put(student.getStudentId(), student);
}
if (type == Subject.class) {
values.forEach(value -> mark = populateMark(value));
if (subject.getMarks() == null) {
subject.setMarks(new ArrayList<Mark>());
}
students.get(mark.getStudentId()).getSubjects().put(subject.getSubjectId(), subject);
students.get(mark.getStudentId()).getSubjects().get(subject.getSubjectId()).getMarks().add(mark);
}
//}
} catch (Exception e) {
e.printStackTrace();
}
}
A forEach-ben (
value -> student = populateStudent(value)
) ezt a hibát kapom: ''Local variable student defined in an enclosing scope must be final or effectively final'Tudja valaki, hogy lehet ezt megoldani?
Köszi! -
Drizzt
nagyúr
Kérdés:
- Addott egy osztály, aminek főleg beépített osztályok az adattagjai. Van benne 1-2 Set is, amiket nyilván addAll-lal szeretnék összeuniózni. Erre van-e valami jó library, ami generálhat ilyet? Szóval olyat, mint lent az incrementBy.public class Example {
private Double value;
private Integer count;
private Set<String> stringSet;
public void incrementBy(Example other) {
value += other.value;
count += other.count;
stringSet.addAll(other.stringSet);
}
}
-
floatr
veterán
válasz
togvau #10991 üzenetére
Nézd nem mondom, hogy hibátlan a framework. Tele van apróbb hiányosságokkal, dokumentálatlan sok helyen, és a dobott hibák félrevezetőek.
De ha alaposan ismered, nem csupán a tutorialokat bújod, akkor fel fogod ismerni az alapvető összefüggéseket. A fenti lazy init probléma nem bug. Így működik a JPA, és ha a @Transactional használata problémát okoz, akkor nagyon gyorsan igyekezz elsajátítani, mert mint mondtam: alap.Az iménti kódrészlettel van egy baromi nagy baj, nem is csupán a paraméterek száma miatt. A query, amit leírtál, egy JPQL SELECT. Annyiban különbözik az SQL-től, hogy objektumokat kezel (többek között). A
p.user=?1
nem a táblában lévő oszlopra vonatkozik, hanem a Photo entitás user adattagjára, ami gondolom User típusú. A JPQL nem long értéket vár, hanem egy User objektumot. Helyesen így lenne:select p.id from Photo p where p.user.id = ?1
feltételezve, hogy a user azonosítója az id nevű property, így lehetne Long paraméterrel hívni. A restricteddel az a baj, hogy feltételesen csapod a query-hez a criteria API-s implementációjával. Ilyet @Query annotációval nem lehet. Ott fixen meg kell adni a JPQL-t, amit nem módosíthatsz, magyarán:select p.id from Photo p where p.user.id = ?1 and p.restricted=?2
lenne a végső JPQL (ha el nem néztem még valamit).Ne ess abba a hibába, hogy a frameworkben keresed a bugot, miközben helytelenül kódolsz.
-
togvau
senior tag
válasz
floatr #10990 üzenetére
Most kellett
Linkeltem fent a bugot, ami valahol van... exception alapján spring data-ban van, de a workaround az egy criteriaquery, aminél nem jelentkezik ugyan az a bug:@Query("select p.id from Photo p where p.user = ?1")
List<Long> findIdsByUserId(long id, boolean restricted);
Ez elhasal, a linkelthez hasonló: org.springframework.dao.InvalidDataAccessApiUsageException: Parameter value [34] did not match expected type... -alMíg ugyan az a lekérdezés (kicsit még kibővítve), criteriaqueryvel, ugyan olyan metódusparaméterekkel, fut ahogy kell:
public List<Long> findIdsByUserId(long id, boolean restricted) {
var cb= em.getCriteriaBuilder();
var ids=cb.createQuery(Long.class);
var root=ids.from(Photo.class);
ids.select(cb.construct(Long.class, root.get("id")));
var pred= new ArrayList<Predicate>();
pred.add(cb.equal(root.get("user"), id));
if (!restricted) pred.add(cb.equal(root.get("restricted"), false));
ids.where(pred.toArray(new Predicate[pred.size()]));
return em.createQuery(ids).getResultList();
}
fura. user= User entity kapcsolat, ami DB-ben egy BIGINT-et jelent user_id mezőben.
-
floatr
veterán
válasz
togvau #10989 üzenetére
Relatív, hogy mi a csúnya
van egy interface a Data metódusoknak, meg egy custom implementációhoz, már ha kell egyáltalán.
Annyit azért nem árt fejben tartani, hogy a @Transactional alap. Nem hozunk létre tranzakciót kézzel, nem nyitunk db kapcsolatot. EntityManager-t a legvéső esetben szabad csak babrálni. Helyette érdemes a projekciókkal csinálni, amit lehet.
-
togvau
senior tag
válasz
floatr #10988 üzenetére
Jaj de bonyolult, és csúnya. DeltaSpike-nál létre lehetett hozni interfacet extends EntityRepository, ahol csak @Query elég volt, ahol meg vegyesen kellett @query, és rendes metódus is, ott abstract class extends AbstractFullEntityRepository, aztán abstract metódusnál csak @query, nem abstractnál meg minden más.
Vannak bajok ezzel a spring datával, belefutottam ebbe is [link], csak sima long-al. Akkor jön elő, ha entity kapcsolat van 2 tábla között. Bár a kapcsolat DB szinten sima id-kkel van meg (bigint-ek), id alapján queryben mégse lehet szűrni, mert bár a query paraméter long, ami jó a biginthez, de spring data azt már entity-nek látja, amivel nem stimmel a long...
Akkor lehet választani, hogy vagy entity szintű kapcsolatok, vagy optimalizált lekérdezések... bár criteriaqueryvel nem próbáltam még. -
floatr
veterán
válasz
togvau #10985 üzenetére
Namost ez egy elég hosszú téma, de röviden itt van egy példa, ami alapján tudsz hozzácsapni összetetteb dolgokat egy JPA repo-hoz. Ezt most csak egy text editorban dobtam össze, de a lényeg itt van. Van egy JPA repository-d, amit a framework majd implementál magának. Kell egy új interface, amiben a saját új metódusaid vannak. Ezt implementálod egy külön osztályban, valamint az új interface-t hozzácsapod a JPA repo-hoz az extends-ben. Innentől kezdve a PhotosRepo típust injektálod be mindenhová, mert a Spring ez alapján készít saját implementációt.
// létrehozol egy inteface-t a saját metódusaidnak
public interface PhotosRepoCustom {...}// meghagyod a Spring Data repository-dat is, de hozzácsapod a saját interface-t is
@Repository
public interface PhotosRepo extends CrudRepository<Photo, Long>, PhotosRepoCustom {...}// implementálod az új interface-t
public class PhotosRepositoryImpl implements PhotosRepoCustom {
@PersistenceContext
EntityManager em;
public List<A> findAllCustom() {
....
}
}De a @Query annotációval használhatsz JOIN FETCH-et is egy query metódusban pl.:
@Repository
public interface PhotosRepo extends CrudRepository<Photo, Long> {
...
@Query("SELECT a FROM A a INNER JOIN FETCH a.b b")
public List<A> find();
} -
p76
senior tag
Spring boot példából:
repository.findByLastName("Bauer").forEach(bauer -> {
log.info(bauer.toString());
});
// for (Customer bauer : repository.findByLastName("Bauer")) {
// log.info(bauer.toString());
// }Ez mi? Mindent 2 módon kell leírni ezentúl?
Az a legnehezebb hogy a programozó tudja mikor melyik módszert kell alkalmazni. -
togvau
senior tag
válasz
floatr #10984 üzenetére
Köszi, így érthető!
Manuálisan pedig entitymanager begintransactionnel lehet kezdeni, és flush-al lezárni?Ezt viszont megint nem értem:
Ez volt: (működött az autowired)@Repository
public interface PhotosRepo extends CrudRepository<Photo, Long> {Ez lett:
@Repository
public abstract class PhotosRepo implements CrudRepository<Photo, Long> {
@PersistenceContext
private EntityManager em;
és mellé autowirednél:
.NoSuchBeanDefinitionException: No qualifying bean of type 'org..asd.db.repository.PhotosRepo' available: expected at least 1 bean which qualifies as autowire candidate.
Miért? -
floatr
veterán
válasz
togvau #10983 üzenetére
Amikor meghívod a lekérdezést a Repository metódusban, az elkér egy aktuális sessiont az EntityManager-től. Mivel lazy, azon a ponton nem oldja fel a hivatkozást, csak egy B proxy-t kap az A objektum. Amikor visszakapod A-t, a session már ment a lecsóba, és hiába hívod meg a gettert, a proxy már nem találja a session-t.
Na többek között erre is való a @Transactional, mert megmondja az EntityManager-nek, hogy hol kezdődik a session lifecycle. Ha nincs @Transactional, akkor a Repository metódusban kéne inícializálni a lazy relációkat. -
togvau
senior tag
spring JPA tesztelgetés_
Van egy junit teszt class, ahol az egyik tesztben létrehozok B entityt, amit egy A entitybe illesztek (onetoone, lazy, nem cascade kapcsolat), és save a repoval.
Aztán, ha ezt le akarom kérdezni findAll-al az A entityket amihez ugye tartozik a B entity is, akkor exception: no session.
Ha Cascade.ALL-on van akkor nincs hiba. Ahogy akkor sem, ha a lekérdezős metódus springes @Transactional.
Nem értem, hogy hova tűnik a session? Mi köze egy független select-nek tranzakciókhoz? -
-
floatr
veterán
válasz
Taoharcos #10979 üzenetére
Nekem az egyik projektben egy ideig két Oracle 10g adatforrásom volt beállítva v7-es driverrel ahhoz hasonlóan, ahogy a második példádban írják le. Nem kellett dialektust használni, viszont mysql-es példák alapján mindig belefutok ebbe. Kezdem én is hülyének érezni magam
-
Taoharcos
aktív tag
válasz
disy68 #10976 üzenetére
Két különböző db, létre vannak hozva (Oracle és Mssql). Alapból nem szeretném beállítani, két külön alkalmazásban kapcsolódok most a db-khez, ott nem is kell beállítani. Most hogy megpróbáltam egy alkalmazásból kapcsolódni mind a kettőhöz, jött elő a hiba, hogy be kéne állítani a dialect-et.
-
venic
kezdő
válasz
disy68 #10976 üzenetére
Köszi a választ.
A jsp-k azok futnak, nincs skype a gépemen
A 80-as porton futna
A két kód teljesen ugyanaz, a db is. Asztali gépen lett megírva a kód ahol teljesen jól működött, aztán meg a laptopon ezt a hibát adta.
XAMPP adatbázissal lett fejlesztve.Hibaüzenet:
HTTP Status 500 – Internal Server Error
Type Exception Report
Message Error instantiating servlet class [login.LoginServlet]
Description The server encountered an unexpected condition that prevented it from fulfilling the request.
Exception
javax.servlet.ServletException: Error instantiating servlet class [login.LoginServlet] org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:678) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:367) org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:860) org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1598) org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1135) java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) java.base/java.lang.Thread.run(Thread.java:844)
Root Cause
java.lang.RuntimeException: login.LoginServlet.<init>(LoginServlet.java:1) java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:488) org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:678) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:367) org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:860) org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1598) org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1135) java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) java.base/java.lang.Thread.run(Thread.java:844)
Note The full stack trace of the root cause is available in the server logs.
Apache Tomcat/9.0.30 -
disy68
aktív tag
válasz
Taoharcos #10974 üzenetére
Alapból nem kéne külön beállítani, ha tud kapcsolódni, akkor meg tudja határozni. Én első körben arra tippelnék, hogy a kapcsolat se épül fel vagy nincs a db létrehozva, akkor is jöhet ez a hiba. A két db amúgy különböző? Van-e mintakód? Próbáltad-e esetleg valami in-memory db-vel (pl. h2/hsql)?
(#10975) venic
Melyik porton futna? Ha 80-as, akkor a skype esetleg lehet a ludas. De valami hibaüzenet nem ártana -
venic
kezdő
Sziasztok!
Azt szeretném kérdezni, hogy Ti futottak-e már bele olyan problémába, hogy
http servlet fut asztali gépen, de nem fut laptopon.
3 laptopon is kipróbáltam.
Mi lehet a probléma?
Köszönöm előre is a válaszokat. -
Taoharcos
aktív tag
Sziasztok!
Spring Boot-ot használok, szeretnék két adatbázist is használni. Találtam rá példát:
[baeldung.com] [medium.com] .
Az a problémám, hogy a Spring Boot mindenképpen kéri, hogy állítsam be a dialect-t. (pl.: spring.jpa.database-platform=org.hibernate.dialect.Oracle10gDialect).
A medium.com-os példában szerepel, hogy a spring.jpa.database=default -el be lehet állítani a dialect-t, de nálam ezzel is "access to dialectresolutioninfo cannot be null when 'hibernate.dialect' not set" hiba jön elő. Viszont a fentebb leírt módon csak az egyik adatbázis dialect-jét tudom beállítani. Valakinek van valami ötlete? -
aDtG
tag
Sziasztok!
A szakmai segítségeteket szeretném kérni.
Szálkezelést szeretném valahogyan megérteni. Pontosan hogyan működnek a párhuzamos szálak.Ezt szeretném megvalósítani:
Van egy server. Csatlakozik 2 vagy több kliens. Minden kliensnek elkezd küldeni a szerver számokat. A kliensek a számokat egy listába tárolják.
Példa kódokat szívesen veszek.
Köszönöm szépen
-
MrSealRD
veterán
Nem kifejezetten Java kérdés....de nincs spec topik és lazán kapcsolódik...előre is elnézést. De minden komoly észrevétel jól jön.
Zöldmezős alkalmazás. DB tervezés. Van egy csomó kis szótár tábla. Ez tipikusan arra van, hogy a legördülőket majd innen töltjük fel. De lenne karbantartó is ezekre a táblákra... Én ezeket a táblákat külön vettem fel... Viszont nemrég jött egy másik ötlet egy kollégától.
Ő 1 táblát javasol lényegében az összes szótártáblában tárolt adatra.
TYPE - ID - NAME - SPEC1 - SPEC2 ...stb mezőkkel.
DOG - 1 - kutyi - szánhúz- null
CAT - 1 - cica - null - alszikItt lényegében a TYPE tartalmazná a típust és az ID-val együtt alkotná az elsődleges kulcsot...
Állítólag azért jó, mert nincs sok kis tábla... Én még annyit gondolok mögé, hogy kevesebb JOIN miatt gyors tud maradni a lekérdezés. De nekem zavarja a szemem, hogy eltérő típusú adatokat gyúrunk egybe. Az eltérő típusú objektumok miatt sok a kitöltetlen mező.
Ráadásul nagy kérdés, hogy amikor mondjuk egy Hibernate-et teszek fölé, akkor mennyire kavarja meg a domaint, hogy minden objektumnál lesz getSpec1() metódus miközben nincs is értelmezve az adott objektumon, mert azt a Spec2 tulajdonságával értelmezzük, és így azért lehetnek fura dolgok a kódban... -
Keem1
veterán
Srácok, SQLite...
Hogy tudom a ResultSet-et foreach-elni? Jelenleg van rá egy while ciklusom, de C#-ból megszokásból mindenre foreach-et használok, szeretném itt is.Ugyanez C#-ban sematikusan:
foreach (datarow in datatable)
Köszi!
-
válasz
Aethelstone #10966 üzenetére
Stíluson és Java IDE-n nem vitatkozunk!
-
válasz
Aethelstone #10959 üzenetére
Te lehet, én nem lennék rá képtelen. Ízlések és pofonok - nekem az Eclipse-szel való munka olyan lenne mintha a fogamat húznák.
-
Zsoxx
senior tag
Egyébként a Netbeans néha indokolatlanul magas processzorhasználatára született már valami megoldás?
-
p76
senior tag
Eclipse maven integrációjával minden rendben van? Nekem rengeteg gondom volt vele. Aztán az IDEA-ban meg semmi.
-
válasz
Aethelstone #10956 üzenetére
Nyilván vi-ban is meg tudod csinálni ugyanazt, de minek szivasd magad?
Szerk.: hozzáteszem az idea ce egy zseniális húzás.
-
floatr
veterán
Megszokás kérdése. Sokáig eclipse-et használtam, de kotlin miatt rá kellett szokni az ideara. Újabban vs code-ot is használok. Leginkább ez a két utóbbi talán a legjobb kompromisszum. Mindegyiknek vannak hülyeségei, de talán az idea és a vs code akadályoz a legkevésbé a munkában
-
aDtG
tag
Sziasztok!
Kérlek titeket, hogy segítsetek kiválasztani a legjobb java IDE-t. Eddig az eclipse illetve a netbeans amit ismerek. Mit tudtok még ajánlani?
köszönöm
-
Megoldottam.
Annyi volt, hogy létrehoztam egy maven projectet és az src mappában létrehoztam egy package-et és az alá bemásoltam a meglévő java file-okat.
Amit pebirosozott, arra rágugliztam, hogy "maven dependency", és beraktam a pom xml-be.
Ezután letöltötte szépen a megfelelő dolgokat.
Majd szoptam egy sort a java verziókkal vagy 3 helyen, utána már ment is. -
togvau
senior tag
Én nem értem ezt a ThreadLocal témát, vagy is azt nem, hogy mire jó. Én ott tartok még, hogy static az elérhető a threadek közt, nem static mező meg minden threadnek saját, mivel a thread is ugyan olyan példány lesz, mint bármelyik osztály.
Vagy ez csak annyi, hogy ne kelljen cloneolgatni valahol, ha mégsem static dolgot használ? -
Sziasztok!
Adott egy pucér java file-okból álló eclipse project, ahol az eclipse részek hibásak lettek, és be sem lehet tölteni már.
Ezeket a java class-okat szeretném egy Maven project keretein belül IntelliJ-be átültetni.
Ennek mi a legegyszerűbb módja?
Leginkább az érdekelne, hogy hogy lesz működőképes az a sok beimportált cucc.
Dolgoztam már Java kódon, de a maga a project file létrehozása és felépítése új nekem.Köszi előre is!
-
Csaby25
őstag
Sziasztok! Elég sok elméletet átvettem már. (Alap java (SE), keretrendszerek nélkül...) Tudtok ajánlani olyan linket ahol konkrét feladatok vannak gyakorlás szempontjából?
Köszi! -
floatr
veterán
válasz
Drizzt #10943 üzenetére
Nincsen szükséged az IDE app server pluginjeire ehhez. Eleve el kell készíteni a deployment eszközöket, van remote debug, a pimpelt IDE csiricsáré funkciói meg igazából szépek meg jók, de maximum egy tapasztalatlan fejlesztőnek nyújt igazi segítséget.
Nem vagyok annak a híve, hogy szövegszerkesztővel kommandózzon az ember, de nincsen szükség egy ultimate-re ahhoz, hogy hatékonyan tudj dolgozni. Ellenben eltávolodsz az operations jellegű feladatoktól, és hajlamossá tesz arra, hogy kihátrálj minden olyan dologból, ami nem közvetlenül implementációs feladat. -
Drizzt
nagyúr
válasz
floatr #10941 üzenetére
Szerintem teljesen mindegy milyen szemmel nézed, a lényeg, hogy a developernek a lehető legkényelmesebb legyen a fejlesztés, annak az összes aspektusával, különös fókuszt téve a debuggingra, a build/deploy sebességre, stb. Milyen olyan pipeline-t tudsz mondani, ami lokálisan gyorsabb, egyszerűbb, szükség esetén gyorsabban testre szabható, mintha közvetlen a gépeden fut az app server, vagy a Spring boot app? Ha csinálsz egy dockerben levő Java EE szervert, akkor ahhoz, hogy oda deployolj, ott debugolj szintén kell ultimate edition. Ha egy app server image-ből kiindulsz dockerfile-ban, és mellé rakod az alkalmazásod a buildnél, az lassabb és körlülményesebb lesz jóval. Sajnos a "jó" devops pipeline-nak gyakran az a vége, hogy az emberek csak deploy + println-nel tudnak debuggolni.
Egyébként a legjobb debugging tool meg szerintem a unit teszt, két okból is: gyors, olcsó, és ha sikerül megfejteni a hibát, automatikusan van rá regression teszt. Csak sajnos nem mindig elég a hibához a unit test.
(#10940) mobal: Ok, de a kérdés kimondottan JEE volt. Egyébként a Springes véleményeddel is vitára kelnék. Munkahelyen ultimate-et használok, itthon CE-t.Az ultimate-ben sokkal több infót kapsz. Pl. autowiringnél már ki szokta jelezni, ha nincs autowire candidate, vagy több is van, s kéne qualifier. application.properties szerkesztése közben az éppen elérhető property-t felkínálja dokumentációstul. Van JPA support. És ezek most csak ilyen hasraütésszerű dolgok, lehetne még találni bőven különbséget. Meg így is vannak amik hiányoznak ultimate-ből is. Pl. custom autoconfigurable bean-ek felismerése autowiringnél, etc.
-
Keem1
veterán
Helló emberek! Kis segítséget kérnék olyan vállalkozó kedvű embertől, aki mind Java, mind C# programozásban otthon van.
Ezt a metódust kéne 1:1-ben Java-ra fordítani.A Java-val csak érintőleges viszonyban vagyok, nem vagyunk se barátok, se rokonok. Amennyiben senki nem vállalja, vagy esetleg nem tudja, nincs gond, megoldom, csak az több idő (ami szintén van, csak akkor az majd a jövő hétre készül el, sok-sok guglizás után
). Tudom-tudom, a legjobb mindig az, ha magam oldom meg, ezzel abszolút tisztában vagyok.
Ennek ellenére ha valaki mégis átkonvertálná, annak nagyon köszi.
-
floatr
veterán
válasz
Drizzt #10937 üzenetére
Őszintén...?
DevOps-os szemmel nézve nem is szerencsés az IDE ilyen szintű integrációja. Ha nem oldható meg egy jól definiálható pipeline/toolchain segítségével automatizáltan még lokálisan is, akkor megette a fene az egészet.
Mondanám, hogy VS Code + gradle FTW, de a Red6 annyira elcseszett most valamit a Java bővítményen, hogy szinte használhatatlan. Addig meg Idea CE... -
suits
tag
Hali!
Valakinek nincs véletlenül valami gyűjteménye(akár csak pár darab) Java állásinterjú kérdésekből?Tudom hogy minden cégnél mást kérdeznek de érdekes lenne látnom párat,gyakorlásnak se lenne utolsó szerintem..
-
hefike
tag
Köszi,végül mindhárom állománynak csináltam egy-egy classt,és külön listába olvasom be.de dob egy hibát,a dátummal nem stimmel vmi...
gondolom,hogy a split a probléma,mert van 4 adat egy sorban pontosvesszővel elválasztva majd a dátum következik,de abban pontokkal van tagolva az év hónap nap.....tudtok segíteni mi a baj?köszi,ide teszem az erre vonatkozó kódrészletet,és hibaüzenetet.
public class Kutyak2 {
private int fajtaazon;
private int nevazon;
private int vizsgalatazon;
private int eletkor;
private LocalDate datum;
static final DateTimeFormatter formazo=DateTimeFormatter.ofPattern("yyyy.MM.dd");
public Kutyak2(String sor3) {
String[] tomb3=sor3.split(";");
this.vizsgalatazon=Integer.parseInt(tomb3[0]);
this.fajtaazon=Integer.parseInt(tomb3[0]);
this.nevazon=Integer.parseInt(tomb3[1]);
this.eletkor=Integer.parseInt(tomb3[2]);
this.datum=LocalDate.parse(tomb3[3],formazo);Hibaüzenet:
Exception in thread "main" java.time.format.DateTimeParseException: Text '14' could not be parsed at index 0
at java.base/java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:2049)
at java.base/java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1951)
at java.base/java.time.LocalDate.parse(LocalDate.java:428)
at kutyafajtak/kutyafajtak.Kutyak2.<init>(Kutyak2.java:25)
at kutyafajtak/kutyafajtak.Kutyakapp.main(Kutyakapp.java:31) -
Fransico
tag
Sziasztok!
Hogy tudom eltüntetni a szóközt a sorok végéről egy 10*10-es szorzótábla kiíratásakor?
-
disy68
aktív tag
válasz
hefike #10922 üzenetére
Gondolom ezt úgy kell elképzelni, mint egy relációs adatbázis 3 tábláját. Vannak rekordok valami azonosító alapján kapcsolva egymáshoz.
Csinálsz a mezők alapján osztályokat. A kapcsolatok gondolom szülő gyerek (egy szülő több gyerek), ilyen esetben a szülő osztályban lesz egy kollekció, ami gyerekeket tartalmaz.
Beolvasod őket a fájlokból, majd az azonosítók alapján a gyerekeket belerakod a szülőkbe.
-
hefike
tag
Sziasztok! Van egy hf-om,abban kérem a segítségeteket.Be kellene olvasni adatokat,de 3 különböző .csv állományból.egy állományból világos,de a 3-at hogyan kell kezelni?Valaki tudna iránymutatást?köszi!
-
Hello,
Hülye kérdések Androidra...
Írogatok egy alkalmazást, ami kamerát és Bluetooth használ, és van némi gondom.
Camera2 API használatával 7.x teszteszközön szépen megy a kamera. 9-esen nincs képe... Az engedélyt megkéri, de max. az Imageview jelenik meg feketén, néha még az sem.
Hogyan lehet megoldani, hogy a Bluetooth eszköz, amit használok, ha nincs kapcsolódva, vagy nem található, ne dőljön össze azonnal a progi? Nyilván a BT műveletek try-catch blokkban vannak, de semmilyen értelmes módszert nem találtam, hogy a catch esetén ne lépjen ki (azaz, ne hibával szálljon el).
Köszi minden ötletet
-
fatal`
titán
Ez gondolom valami iskolai példa
Fieldet nem lehet overrideolni, ilyenkor elrejted őket (gyakorlatilag függetlenül léteznek a memóriában). Mivel a c objektumod "A" típusú, ezért kiíráskor az A.num-ot írod ki. Ha átcastolod "B"-re a "c" objektumot, az eredmény 8 lesz.
Alapvetően ilyet nem csinálunk, szerintem egy normális IDE talán warningot is dob erre (de ebben nem vagyok biztos, rég nem javaztam).
A megfogalmazás nagyon messze van a pontostól, valószínűleg, akik napi szinten javaznak, majd kijavítanak/pontosítanak.Illetve stackoverflow link a témában: [link]
-
crocy
tag
public class Main {
public static void main(String[] args) {
A c = new B();
c.say();
System.out.println(c.num);
}
}
class A {
int num = 7;
void say(){
System.out.println("A");
}
}
class B extends A {
int num = 8;
void say(){
System.out.println("B");
}
}Hi!
A fenti kodnal a c.num miert 7? Az override-olt metodus az ok, hogy dinamikusan a peldanyhoz köti, de a peldanyvaltozot mint ha statikusan kötne.
Kicsit belezavarodtam. Vki pls irjon mar par sort erröl.
köszi elöre is! -
floatr
veterán
-
Csaby25
őstag
"A String literal is created at compile time and the compiler never creates a duplicate String literal. How-
ever, a string with the new operator is created at runtime and it always creates a new string even if it is identical to
an already existing string." P.Sanghera SCJP exam. -
disy68
aktív tag
válasz
Csaby25 #10908 üzenetére
Írnak többmindent is, de ez a válasz, ahol a generált kódot megnézte a válaszoló.
A String osztály java alatt immutable, azaz értékadás után az objektum értéke nem változtatható. E miatt a String összefűzés
String concat = "first" + " " + "last";
4 String objektum létrejöttét jelentené.Erre rakták bele java 8 óta a fordítóba, hogy ahol ilyen található, azt optimalizálja. A String összefűzéseket helyettesíti StringBuilder-rel, ezért nem fog létrejönni annyi String objektum.
Vannak még egyéb String-ekkel kapcsolatos optimalizációk, amiket a fordító/futtató környezet csinál/alkalmaz, pl. a válaszokban említett internal pool, ahol kvázi cache-elve vannak String objektum példányok, java 8-as updattel jött a G1 GC-be, hogy tud deduplikálni String-eket. Java 9-ben pedig jött egy olyan, hogy azokat a szövegeket, amiket lehet, ISO-8859-1/Latin-1 kódolással tárolja a JVM UTF-16 helyett (1 vs 2 byte/karakter).
>javap -c Test Compiled from "Test.java" public java.lang.String makinStrings(); Code: 0: ldc #5; //String Fred 2: astore_1 3: new #6; //class java/lang/StringBuilder 6: dup 7: invokespecial #7; //Method java/lang/StringBuilder."<init>":()V 10: aload_1 11: invokevirtual #8; //Method java/lang/StringBuilder.append: (Ljava/lang/String;)Ljava/lang/StringBuilder; 14: ldc #9; //String 47 16: invokevirtual #8; //Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder; 19: invokevirtual #10; //Method java/lang/StringBuilder.toString:()Ljava/lang/String; 22: astore_1 23: aload_1 24: iconst_2 25: iconst_5 26: invokevirtual #11; //Method java/lang/String.substring:(II)Ljava/lang/String; 29: astore_1 30: aload_1 31: invokevirtual #12; //Method java/lang/String.toUpperCase:()Ljava/lang/String; 34: astore_1 35: aload_1 36: invokevirtual #13; //Method java/lang/String.toString:()Ljava/lang/String; 39: areturn
-
crocy
tag
Hi!
Van ket listam(List<Elem>a, List<Elem>b), meg szeretnem szamolni, hany helyen van közös elemük java 8 stream segitsegevel.
Vmi közös iterator vagy foreach kene, de ahogy neztem ezt ebben a verzioban meg nem lehet.vmi hasonloara gondoltam:
*******
.filter( (a,b) --> a.next().equals(b.next()) )
.count()Köszi elöre is!
-
Csaby25
őstag
Sziasztok!
Valaki meg tudná magyarázni, hogy miért csak 3 String objektum jött létre?
Itt a válasz, csak nem értem, hogy miért..
[link]
Köszi! -
Drizzt
nagyúr
válasz
togvau #10905 üzenetére
A streammel nincs baj, az Arrays.asListet használod rosszul. Az listát csinál a megadott tömb elemeiből. Jelen esetben egy egy elemű listád lesz, aminek az az egy eleme egy int[] lesz.
int[] ints = new int[]{0, 1, 2, 3};
Arrays.asList(ints).stream().forEach(System.out::println);
Arrays.asList(1, 2, 3).stream().forEach(System.out::println);
Arrays.stream(ints).forEach(System.out::println);
Eredménye:
[I@1218025c
1
2
3
01
2
3
-
togvau
senior tag
próbálom megérteni a streamek furcsaságait, de nem sikerül:
Arrays.asList(asd).stream().forEach(System.out::println);
Miért nem írja ki a lista tartalmát? Egy ref stringet ír ki, gondolom a stream-ét.for (int j : asd) {
System.out.println(j);
}
A klasszikus foreach meg simán működik, ahogy kell.Miért?
-
p76
senior tag
Használjátok a funkcionális programozást mindenhol ahol csak lehet?
for (Label infoLabel : infoLabelList) {
uiTable.row();
uiTable.add(infoLabel);
}helyett:
infoLabelList.forEach(x -> {
uiTable.row();
uiTable.add(x);
});
Új hozzászólás Aktív témák
Hirdetés
A topicot kiemeltem. Valaki nem akar egy nyitó hsz-t írni?:))
- Asus ROG Phone 9 Pro 16GB/512GB - 3 ÉV GARANCIA - MAKULÁTLAN!
- Thrustmaster TS -Pc bázis
- Eladó egy Asus g751j Dobozzal gyári tőltővel
- HP 13"FullHD IPS,i5 8265u(8x3,9Ghz)Villágító billentyűzet,8GB Ram,256-512SSD,jó akku,Szép állapot
- Újszerű Asus,játékra is,17,3"FullHD,i7 8550(8X4Ghz)GT920mx 2/4GB DDR5 VGA16GB RAM,SSD+HDD,
- BESZÁMÍTÁS! Microsoft XBOX Series S 512GB játékkonzol garanciával hibátlan működéssel
- AKCIÓ! Lenovo Thinkpad T14 Gen 3 üzleti notebook - i5 1245U 16GB RAM 512GB SSD Intel Iris XeW11
- Telefon felvásárlás!! Samsung Galaxy S25, Samsung Galaxy S25 Plus, Samsung Galaxy S25 Ultra
- Samsung Galaxy A40 64GB, Kártyafüggetlen, 1 Év Garanciával
- BESZÁMÍTÁS! ASUS ROG STRIX X570-E Gaming alaplap garanciával hibátlan működéssel
Állásajánlatok
Cég: PC Trade Systems Kft.
Város: Szeged
Cég: CAMERA-PRO Hungary Kft
Város: Budapest