给出以下代码示例:
public class WeirdStuff {
public static int doSomething() {
while(true);
}
public static void main(String[] args) {
doSomething();
}
}
Run Code Online (Sandbox Code Playgroud)
这是一个有效的Java程序,虽然方法doSomething()应该返回一个int但从来没有.如果你运行它,它将以无限循环结束.如果将while循环的参数放在一个单独的变量中(例如boolean bool = true),编译器会告诉你在这个方法中返回一个int.
所以我的问题是:这是Java规范中的某个地方,是否存在这种行为可能有用的情况?
Java中的以下方法编译得很好.
public String temp() {
while(true) {
if(true) {
// Do something.
}
}
}
Run Code Online (Sandbox Code Playgroud)
该方法有一个显式的返回类型,尽管它编译得很好但java.lang.String没有return语句.但是,以下方法无法编译.
public String tempNew() {
if(true) {
return "someString";
}
}
Run Code Online (Sandbox Code Playgroud)
发出编译时错误,指示" 缺少return语句 ",即使使用该if语句指定的条件始终为true(它具有boolean永远不会通过反射更改的常量).为了成功编译,必须修改该方法,如下所示.
public String tempNew() {
if(true) {
return "someString";
} else {
return "someString";
}
}
Run Code Online (Sandbox Code Playgroud)
要么
public String tempNew() {
if(true) {
return "someString";
}
return "someString";
}
Run Code Online (Sandbox Code Playgroud)
关于while循环的第一种情况,第二种情况似乎是合法的,尽管它无法编译.
在第二种情况下是否有一个原因超出了编译器的一个特性.
所以我在一家公司工作,我在这里相对比较新,但我在一些生产代码中遇到了一些非常奇怪的东西,我告诉他们是由一个在C#中更有知识的人写的,而不是"我做了特别的事".办法".因此,我试图想出理由去做我要解释的事情,给出怀疑的好处,但我无法想出任何东西.
IList<Facility> Facilities = new List<Facility>();
上面这一行是问题的核心......整个代码中的其他奇怪之处在于无法使用某些东西的接口,因此在使用它们之前必须将数据复制回List中(例如导出通过webservice,不允许使用接口,必须是IList的实现)
现在我理解接口是很棒的,你可以编写方法,期望接口中的方法存在于传递给你的方法的实现上但是...
有人可以帮助我在这里...任何人都可以想到你立即将List转发回应用程序数据层中的界面的原因吗?
另外,为了清楚起见......这些列表也不用于可互换的数据类型,这发生在定义和存储List的位置,并且存储了每个数据类型的IList.
谢谢!
在这个类中,我定义了一个构造函数,它初始化一个数组并用Point2D.Double填充它.我想定义一个toString方法,输出数组中的Point2D.Double.所以在toString方法中,我创建一个for循环,返回数组中的每个Point2D.Double.问题是,我不知道为什么Eclipse告诉我for语句中的更新是死代码.
import java.awt.geom.Point2D;
public class SimplePolygon {
public int n; // number of vertices of the polygon
public Point2D.Double[] vertices; // vertices[0..n-1] around the polygon
// boundary
public SimplePolygon(int size) {
n = size;
vertices = new Point2D.Double[n]; // creates array with n size. Elements are doubles.
for(int i = 0; i < n; i++)
{
Point2D.Double point = new Point2D.Double(Math.random() * 6, Math.random() * 6);
vertices[i] = point;
}
}
public String toString() {
for(int i = 0 ; …Run Code Online (Sandbox Code Playgroud)