Как выловить java util nosuchelementexception
Constructs a NoSuchElementException , saving a reference to the error message string s for later retrieval by the getMessage method.
Method Summary
Methods inherited from class java.lang.Throwable
Methods inherited from class java.lang.Object
Constructor Detail
NoSuchElementException
public NoSuchElementException()
Constructs a NoSuchElementException with null as its error message string.
NoSuchElementException
Constructs a NoSuchElementException , saving a reference to the error message string s for later retrieval by the getMessage method.
Java™ Platform
Standard Ed. 8
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2023, Oracle and/or its affiliates. All rights reserved. Use is subject to license terms. Also see the documentation redistribution policy.
Class NoSuchElementException
Constructs a NoSuchElementException , saving a reference to the error message string s for later retrieval by the getMessage method.
Constructs a NoSuchElementException with the specified detail message and cause.
Constructs a NoSuchElementException with the specified cause.
Method Summary
Methods declared in class java.lang.Throwable
Methods declared in class java.lang.Object
Constructor Details
NoSuchElementException
public NoSuchElementException ()
Constructs a NoSuchElementException with null as its error message string.
NoSuchElementException
public NoSuchElementException (String s, Throwable cause)
Constructs a NoSuchElementException with the specified detail message and cause.
NoSuchElementException
public NoSuchElementException (Throwable cause)
Constructs a NoSuchElementException with the specified cause. The detail message is set to (cause == null ? null : cause.toString()) (which typically contains the class and detail message of cause ).
NoSuchElementException
public NoSuchElementException (String s)
Constructs a NoSuchElementException , saving a reference to the error message string s for later retrieval by the getMessage method.
Report a bug or suggest an enhancement
For further API reference and developer documentation see the Java SE Documentation, which contains more detailed, developer-targeted descriptions with conceptual overviews, definitions of terms, workarounds, and working code examples. Other versions.
Java is a trademark or registered trademark of Oracle and/or its affiliates in the US and other countries.
Copyright © 1993, 2022, Oracle and/or its affiliates, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
All rights reserved. Use is subject to license terms and the documentation redistribution policy.
DRAFT 20-valhalla+1-75
Правильно ли я использую исключения в java?
Добрый День!
Помогите разобраться с основами java, а именно с работой с исключениями.
Есть простая программа, спрашивающая из консоли положительное число.
Если число отрицательное выбрасывается исключение и снова вызывается функция запроса числа.
Собственно пара вопросов:
1. Откуда берется java.util.NoSuchElementException, как это исправить?
2. Насколько оправданно в этом случае использование исключений, вместо старого доброго if-else блока?
3. Где стоит обрабатывать исключение. Непосредственно в функции где оно может выпасть или же в функции вызывающей ее?
4. Вообще используется ли прием reвызова функции из блока catch? Или это бред и обычно используются другие паттерны?
Благодарю) Код программы ниже)
import java.util.Scanner; public class MyProgram < public static void main(String[] args) < int input; try < input = askForInput(); >catch (IllegalArgumentException e) < System.out.println(e.getMessage()); input = askForInput(); >System.out.println(input); > private static int askForInput() < try (Scanner sc = new Scanner(System.in)) < System.out.println("Введите положительное число:"); int result = sc.nextInt(); if (result < 0) < throw new IllegalArgumentException("Вы ввели отрицательное число"); >return result; > > >
- Вопрос задан более года назад
- 151 просмотр
4 комментария
Простой 4 комментария
2. Насколько оправданно в этом случае использование исключений, вместо старого доброго if-else блока?
Не оправдано совершенно. Нужно по максимуму избегать бросания исключений, где можно обойтись обычной проверкой.
Вот посмотри как я делал абсолютно тоже самое в Kotlin (requestUserInputAsInt). В Kotlin примере я бросаю исключение, если программист передал неправильные значения диапазона. Когда он поймает исключение, он исправит свою ошибку и больше она не возникнет. А ввод пользователя ожидаемо может быть неправильным, поэтому мы и обрабатываем это так, как будто это ожидаем.
https://qna.habr.com/q/1166050#answer_2182636
Эти языки знать не обязательно, все языки похожи. Просто читай как псевдокод, всё должно быть понятно.
Если в конструктор класса передали невалидный параметр, то можно бросить исключение, так как в противном случае всё равно нужно будет создать невалидный объект, да ещё и не забыть проверить его после создания, что он невалидный. Ты проверишь, а твой коллега нет. Вот здесь исключение абсолютно оправдано. Есть и другие ситуации. Нужно исходить из логики.
Saved searches
Use saved searches to filter your results more quickly
Cancel Create saved search
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.
slick / slick Public
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
SQLite codegen fails with java.util.NoSuchElementException for primary key with camel-casing #1955
samikrc opened this issue Oct 1, 2018 · 2 comments
SQLite codegen fails with java.util.NoSuchElementException for primary key with camel-casing #1955
samikrc opened this issue Oct 1, 2018 · 2 comments
Comments
samikrc commented Oct 1, 2018 •
DESCRIPTION:
When I try to generate the schema from a database, I get java.util.NoSuchElementException on one of the column names.
STEPS TO REPRODUCE:
Attaching a very small database which produces the error, when trying to generate code with the following snippet. Note: the attachment is zipped.
apollo.db.zip
object TableCodeGenerator extends App < slick.codegen.SourceCodeGenerator.main(Array( "slick.jdbc.SQLiteProfile", "org.sqlite.JDBC", "jdbc:sqlite:/home/samik/db/apollo.db", "/home/samik/git/project/src/main/scala", "full.qualified.name") ) >
EXPECTED RESULT:
Expected to see the table schema in a scala file.
ACTUAL RESULT:
Here is the stack trace:
Exception in thread "main" java.util.NoSuchElementException: key not found: clientid at scala.collection.MapLike$class.default(MapLike.scala:228) at scala.collection.AbstractMap.default(Map.scala:59) at scala.collection.MapLike$class.apply(MapLike.scala:141) at scala.collection.AbstractMap.apply(Map.scala:59) at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234) at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234) at scala.collection.Iterator$class.foreach(Iterator.scala:893) at scala.collection.AbstractIterator.foreach(Iterator.scala:1336) at scala.collection.IterableLike$class.foreach(IterableLike.scala:72) at scala.collection.AbstractIterable.foreach(Iterable.scala:54) at scala.collection.TraversableLike$class.map(TraversableLike.scala:234) at scala.collection.AbstractTraversable.map(Traversable.scala:104) at slick.jdbc.JdbcModelBuilder$PrimaryKeyBuilder.model(JdbcModelBuilder.scala:291) at slick.jdbc.JdbcModelBuilder$TableBuilder.primaryKey$lzycompute(JdbcModelBuilder.scala:166) at slick.jdbc.JdbcModelBuilder$TableBuilder.primaryKey(JdbcModelBuilder.scala:166) at slick.jdbc.JdbcModelBuilder$TableBuilder.buildModel(JdbcModelBuilder.scala:160) at slick.jdbc.JdbcModelBuilder$$anonfun$buildModel$3$$anonfun$apply$17.apply(JdbcModelBuilder.scala:95) at slick.jdbc.JdbcModelBuilder$$anonfun$buildModel$3$$anonfun$apply$17.apply(JdbcModelBuilder.scala:95) at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234) at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234) at scala.collection.immutable.List.foreach(List.scala:381) at scala.collection.TraversableLike$class.map(TraversableLike.scala:234) at scala.collection.immutable.List.map(List.scala:285) at slick.jdbc.JdbcModelBuilder$$anonfun$buildModel$3.apply(JdbcModelBuilder.scala:95) at slick.jdbc.JdbcModelBuilder$$anonfun$buildModel$3.apply(JdbcModelBuilder.scala:92) at slick.dbio.DBIOAction$$anonfun$map$1.apply(DBIOAction.scala:43) at slick.dbio.DBIOAction$$anonfun$map$1.apply(DBIOAction.scala:43) at slick.basic.BasicBackend$DatabaseDef$$anonfun$slick$basic$BasicBackend$DatabaseDef$$runInContextInline$1.apply(BasicBackend.scala:171) at slick.basic.BasicBackend$DatabaseDef$$anonfun$slick$basic$BasicBackend$DatabaseDef$$runInContextInline$1.apply(BasicBackend.scala:171) at scala.concurrent.Future$$anonfun$flatMap$1.apply(Future.scala:253) at scala.concurrent.Future$$anonfun$flatMap$1.apply(Future.scala:251) at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:32) at scala.concurrent.impl.ExecutionContextImpl$AdaptedForkJoinTask.exec(ExecutionContextImpl.scala:121) at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260) at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339) at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979) at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)
SETUP:
The database has to exist at the path mentioned in the code. Using sqlite-jdbc v3.8.7 and Slick v3.2.3.
NOTES:
It seems to me from the error that some case mismatch is going on. In this database, there are a few fields which uses camel casing, e.g., the field mentioned in the stacktrace is provided as ‘clientId’, however some code is trying to find a key named «clientid». Another table which has all the column names in lower case didn’t have any issue.
Edit: By debugging the Slick code, it looks like the column names in the table are coming in with correct case, but the column names in the primary key set are coming in lower case. That is tripping up the code at slick.jdbc.JdbcModelBuilder$PrimaryKeyBuilder.model(JdbcModelBuilder.scala:291).
The text was updated successfully, but these errors were encountered: