Tag: return type

为什么Java规范要求程序的主要方法只是无效?

虽然返回类型不是方法签名的一部分,但JVM会查找精确的声明 public static void main(String[] args) 我的假设是,由于方法签名没有包含“返回类型”,我必须允许更改返回类型。 但是,如果我将其更改为public static int main(String[] args)并返回一个值,假设为0,则JVM无法执行该程序并退出时出现错误 Error: Main method must return a value of type void in class TestData, please define the main method as: public static void main(String[] args) 为什么Java规范要求主方法只是无效? 当返回类型不是方法签名的一部分时,为什么会出现此限制? 这个问题不同于为什么java中的main()是无效的? :这个问题因基于意见而被关闭,而我正在寻找JVM调用此方法的代码位置/进程,以及强制它们将此方法保持为空的限制。 他们采取了哪些设计决策(以及背后的推理),以及记录在何处。 我正在寻找事实,以便知道为什么会这样做。 如果不仔细阅读问题的详细信息,请不要将其标记为重复。 PS:退出,是另一回事。 我更关心该计划的进入。 此外,返回的值可能不是使用JVM,而是将其限制为void限制可扩展性。 到目前为止,我从这个问题中学到的是:Java规范已明确修复了返回类型,以避免混淆迁移程序员(C / CPP),他们可能期望此值返回到操作系统,但由于JVM介于此之间,因此该值永远不会返回OS。 为了这个特殊目的(返回OS的值),他们提供了System.exit()方法。 对于那些建议返回类型是签名的一部分的人 – 只需尝试在类中定义以下两种方法 public static […]

此方法必须返回boolean(Java)类型的结果

这是我的代码。 boolean checkHit2() { if (cx = 640) {return true;} if (cy < ground[(int)cx]) {return false;} if (cx blue – 15) { score = (int)score + 1; 我究竟做错了什么? 它给我错误消息“此方法必须返回类型为boolean的结果”。 请帮忙。

错误:此处不允许使用’void’类型

我正在学习使用课程,我的部分任务是制作这个Car课程。 我在第6行遇到错误,我尝试打印类中方法的结果。 我认为这意味着我试图打印一些不存在的东西,我怀疑它是里程方法。 我尝试将其更改为返回里程,但这也无效。 有任何想法吗? public class TestCar { public static final void main(String args[]) { Car c = new Car (); c.moveForward(4); System.out.println (“The car went” + c.mileage() + “miles.”); // <– L6 } } class Car { public int miles = 2000; public void moveForward(int mf) { if (miles != 2000) { miles […]

为什么Java 5+ API不利用协变返回类型?

从Java 5开始,我们可以使用协变返回类型 。 为什么Java API不利用这个? 以Graphics2D.create()为例。 为什么不重写返回Graphics2D对象? 在我看来,它在所有情况下都是向后兼容的。

SUM的数据类型导致MySQL

我在使用SUM时将MySQL查询的结果转换为Java类时遇到了一些问题。 在MySQL中执行简单的SUM时 SELECT SUM(price) FROM cakes WHERE ingredient = ‘chocolate’; 如果price是一个整数,则SUM似乎有时会返回一个字符串,有时会返回一个整数,具体取决于JDBC驱动程序的版本。 显然,服务器确实告诉JDBC驱动程序SUM的结果是一个字符串,并且JDBC驱动程序有时“方便地”将其转换为整数。 (见Marc Matthews的解释 )。 Java代码使用一些BeanInfo和Introspection来自动填充查询结果的bean(列表)。 但是,如果部署应用程序的服务器之间的数据类型不同,这显然无法工作。 我不在乎我得到一个字符串或整数,但我想总是拥有相同的数据类型,或者至少事先知道我将获得哪种数据类型。 有没有办法知道MySQL代码中的MySQL SUM将返回哪种数据类型? 或者有没有人知道一些更好的方法来解决这个问题?

如何避免使用exception进行流量控制?

我被分配了一个项目来开发一组类,这些类充当存储系统的接口。 要求是该类支持具有以下签名的get方法: public CustomObject get(String key, Date ifModifiedSince) 基本上,当且仅当在ifModifiedSince之后修改了对象时,该方法才会返回与key关联的CustomObject 。 如果存储系统不包含key则该方法应返回null。 我的问题是: 如何处理密钥存在但未修改对象的方案? 这很重要,因为使用此类的一些应用程序将是Web服务和Web应用程序。 这些应用程序需要知道是返回404(未找到),304(未修改)还是200(OK,这是数据)。 我正在权衡的解决方案是: 当存储系统不包含key时,抛出自定义exception ifModifiedSince失败时抛出自定义exception。 将状态属性添加到CustomObject。 要求来电者检查财产。 我对这三个选项中的任何一个都不满意。 我不喜欢选项1和2,因为我不喜欢使用流控制的exception。 当我的目的是表明没有价值时,我也不喜欢返回一个值 。 尽管如此,我倾向于选择3。 有没有我不考虑的选择? 有没有人对这三种选择中的任何一种都有强烈的感受? 这个问题的答案,转述: 提供一个contains方法并要求调用者在调用get(key, ifModifiedSince)之前调用它,如果key不存在则抛出exception,如果没有修改object则返回null。 将响应和数据(如果有)包装在复合对象中。 使用预定义常量表示某个状态( UNMODIFIED, KEY_DOES_NOT_EXIST )。 调用者实现了用作回调的接口。 设计很糟糕。 为什么我不能选择答案#1 我同意这是理想的解决方案,但我已经(不情愿地)被解雇了。 这种方法的问题在于,在大多数使用这些类的情况下,后端存储系统将是第三方远程系统,如Amazon S3。 这意味着contains方法需要往返存储系统,在大多数情况下会进行另一次往返。 因为这会花费时间和金钱 ,所以不是一种选择。 如果不是因为这个限制,这将是最好的方法。 (我意识到我没有在这个问题中提到这个重要元素,但我试图保持简短。显然它是相关的。) 结论: 在阅读完所有答案后,我得出的结论是,在这种情况下,包装器是最好的方法。 基本上我会模仿HTTP,包括响应代码和内容正文(消息)的元数据(标题)。

接口如何包含在其签名或返回类型中引用接口的具体实现类型的方法?

假设我正在设计类似以下界面: public interface MyInterface{ public MyInterface method1(); public void method2(MyInterface mi); } 但是,需要注意的是, method1的返回类型和method2的参数与具体实现相匹配,而不仅仅是MyInterface 。 也就是说,如果我有实现MyInterface ,它需要具有以下内容: public class MyInterfaceImpl implements MyInterface{ @Override public MyInterfaceImpl method1(){…} @Override public void method2(MyInterfaceImpl mi){…} } 如上所述, method1不会导致任何编译错误,但没有任何保证返回类型在所有实现中都匹配。 当然, method2甚至不会编译,因为签名与接口不匹配。 一个候选解决方案是在generics中使用自引用或递归边界: public interface MyInterface<T extends MyInterface>{ public T method1(); public void method2(T mi); } public class MyInterfaceImpl implements MyInterface{ […]

从java中的方法返回不同类型的数据?

public static void main(String args[]) { myMethod(); // i am calling static method from main() } 。 public static ? myMethod(){ // ? = what should be the return type return value;// is String return index;// is int } myMethod()将返回String和int值。 所以从main()获取这些返回值我想出了以下解决方案。 创建一个类调用ReturningValues public class ReturningValues { private String value; private int index; // getters and […]