Tag: 返回值

Java如何从try,catch和最后返回一个值?

因此,当我在“try {}”中执行块代码时,我尝试返回一个值,它会出现“无返回值”。 这是我使用的代码,代表我的问题。 import org.w3c.dom.ranges.RangeException; public class Pg257E5 { public static void main(String[]args) { try { System.out.println(add(args)); } catch(RangeException e) { e.printStackTrace(); } finally { System.out.println(“Thanks for using the program kiddo!”); } } public static double add(String[] values) // shows a commpile error here that I don’t have a return value { try { int […]

Javagenerics – 覆盖抽象方法并具有子类的返回类型

我正在尝试创建一个设置,其中一组子类覆盖超类。 这个超类包含一个抽象方法 – 理想情况下,它的返回类型是调用此方法的对象的返回类型,因此它的行为有效地如下: public abstract class SuperClass{ public abstract SuperClass getSelf(); } public class SubClass extends SuperClass{ @Override public SubClass getSelf(){ return this; } } 我不确定这样的事情是否可能,因为我认为返回类型总是必须相同才能使覆盖工作 – 但是我一直在想答案,如果存在的话,就在这条线的某个地方… public abstract class SuperClass{ public abstract getSelf(); } public class SubClass extends SuperClass{ @Override public SubClass getSelf(){ return this; } } 谢谢你的帮助。 编辑:添加扩展SuperClass到SubClass,呃

在exception被捕获错设计后返回null

我总是遇到同样的问题,当在具有非void返回值的函数中捕获exception时,我不知道要返回什么。 以下代码段说明了我的问题。 public Object getObject(){ try{ … return object; } catch(Exception e){ //I have to return something here but what?? return null; // is this a bad design?? } } 所以我的问题是: 返回null设计不好吗? 如果是这样,什么被视为更清洁的解决方案? 谢谢。

Java:返回类(不是实例)

是否可以在静态方法中返回一个类? 我会解释… 我有: public class A { public static void blah(){} } public class B { } 我想在B中创建一个静态方法返回A 所以你可以这样做: A.blah(); 和 B.getA().blah(); 这样,无需创建A的实例。 只需使用它静态方法。 这可能吗?

方法返回类型以实现多个接口

是否可以指定一个返回实现两个或多个接口的对象的方法? 假设我们有以下接口: interface FooBar { [Foo] & [Bar] getFooBar(); } interface Foo { void doFoo(); } inteface Bar { void doBar(); } FooBar实现者需要提供getFooBar()方法,该方法返回一个满足Foo和Bar的类型的实例。 我到目前为止尝试的是使用generics: interface FooBar { T getFooBar() } class SomeImplementor implements FooBar { private FooAndBarImpl fSomeField; public T getFooBar() { return fSomeField; } } 鉴于FooAndBarImpl是由框架或库提供的某种类型并实现Foo和Bar我认为应该可行。 但是,它没有,因为“FooAndBarImpl无法转换为T”。 这是为什么? getFooBar()隐含的合同没有像我看到的那样被打破。 另一个解决方案是定义一个扩展Foo和Bar的新接口,并将其用作返回类型。 我在getFooBar()实现中返回fSomeField的空包装时没有多大意义。 编辑: 如果有人能解释为什么generics方法不起作用,我将不胜感激。 我只是没有看到它。

使用注释确保不会丢弃方法返回的值

Java中的String是不可变的。 从广义上讲,以下片段是“错误的”。 String s = “hello world!”; s.toUpperCase(); // “wrong”!! System.out.println(s); // still “hello world!”!!! 尽管这是“错误的”,代码编译和运行,也许是许多初学者的困惑,他们必须被告知错误是什么,或者通过查阅文档找出自己。 阅读文档是理解API的重要部分,但我想知道是否可以通过额外的编译时检查来补充它。 特别是,我想知道是否可以使用Java的注释框架来强制执行某些方法返回的值不被忽略。 然后,API设计者/库作者将在其方法中使用此注释来记录不应忽略哪些返回值。 一旦API补充了这个注释(或者可能是另一种机制),那么每当用户编写如上所述的代码时,它就不会编译(或者通过严厉的警告进行编译)。 那么这可以做到,你会怎么做这样的事情? 附录:动机 很明显,在一般情况下,Java 应该允许忽略方法的返回值。 List.add ( 总是为 true ), System.setProperty (之前的值)等方法的返回值可能在大多数情况下可以安全地被忽略。 但是,也有许多方法的返回值不应该被忽略。 这样做几乎总是程序员错误,或者不正确使用API​​。 这包括以下内容: 关于不可变类型(例如String , BigInteger等)的方法,它返回操作的结果 ,而不是改变它被调用的实例。 返回值是其行为的关键部分且不应忽略的方法,但人们有时会做(例如InputStream.read(byte[])返回读取的字节数,不应假设为整个长度数组) 目前,我们可以编写忽略这些返回值的代码,并让它们在没有警告的情况下编译和运行。 静态分析检查器/ bug查找器/样式执行器/等几乎可以肯定地将这些标记为可能的代码味道,但是如果可以通过API本身(可能通过注释)强制执行它,它似乎是合适的/理想的。 一个类几乎不可能确保它总是“正确”使用,但它可以做些什么来帮助指导客户正确使用(参见: Effective Java 2nd Edition,Item 58:对可恢复的条件使用已检查的exception和编程错误的运行时exception和项62:记录每种方法抛出的所有exception )。 有一个注释可以强制客户端不要忽略某些方法的返回值,并且编译器在编译时以错误或警告的forms强制执行它,这似乎符合这个想法。 附录2:代码段 以下是初步尝试,简洁地说明了我想要实现的目标: @interface Undiscardable { […]

为什么int类型方法允许字符类型作为返回值?

这是我的代码,但我没有得到int getValue()方法如何接受char类型作为返回值。 它是如何工作的? 请问任何人可以解释一下这种方法是如何工作的? public class CharToInteger { private static Scanner input; public static int getValue(char character){ return character; } public static void main(String[] args) { input = new Scanner(System.in); System.out.println(“Enter a character to get value of it:”); String inputString=(String) input.next(); char inputCharacter=inputString.charAt(0); System.out.println(getValue(inputCharacter)); } } 提前致谢 :)

初学者Java(循环) – 缺少返回语句

import java.util.Scanner; public class Vending { public double vend(double balance) { Scanner in = new Scanner(System.in); balance = 0; System.out.print(“Enter a command = “); String command = in.nextLine(); while (in.hasNext()) { if (command.equals(“penny”)) { balance = balance + 0.01; System.out.println(“balance = ” + balance); } return balance; } } } 嗨! 我已经尝试了一切来弄清楚为什么不能识别return语句。 如果我把“返回余额”放在其他任何地方,它说system.out.println是无法访问的……你们中的任何人都可以帮助我,为什么这可能不起作用? 谢谢!!

返回NULL的替代方法

/** * Returns the foo with the matching id in this list * * @param id the id of the foo to return * @return the foo with the matching id in this list */ public Foo getFoo(int id) { for (Foo foo : list) { if (foo.getID() == id) { return foo; } } […]

从Java中的方法返回状态标志和消息的最佳方法

我有一个看似简单的场景,我想要一个简单的解决方案,但是哪个是“最正确的”或“大多数Java”并不明显。 假设我在某个类中有一个小的身份validation(客户端客户端)方法。 validation可能由于多种原因而失败,我想为控制流返回一个简单的布尔值,但也为用户返回一条String消息。 这些是我能想到的可能性: 返回一个布尔值,并传入一个StringBuilder来收集消息。 这是最接近C风格的方式。 抛出exception而不是返回false,并包含消息。 我不喜欢这样,因为失败并非例外。 使用boolean和String创建一个名为AuthenticationStatus的新类。 对于一种小方法来说,这似乎有些过分。 将消息存储在成员变量中。 这会引入潜在的竞争条件,我不喜欢它意味着某些状态并不存在。 还有其他建议吗? 编辑错过此选项 返回null表示成功 – 这不安全吗? 编辑方案: 我选择了最OO解决方案并创建了一个小型AuthenticationResult类。 我不会用任何其他语言来做这件事,但我喜欢Java。 我也喜欢返回String []的建议,因为它像null返回但更安全。 Result类的一个优点是,如果需要,您可以获得包含更多详细信息的成功消息。