是否可以使用
for
指令在接口中初始化数组?
简单问题 - 是否可以在接口中初始化数组?
是的。
这可行,但我想通过“for”指令初始化数组。好的,谢谢帮助
这不是一个简单的问题;)
您不能严格执行此操作,因为您无法将静态块添加到接口。但您可以嵌套
class
或 enum
。
恕我直言,这可能更令人困惑而不是有用,如下:
public interface I {
int[] values = Init.getValue();
enum Init {;
static int[] getValue() {
int[] arr = new int[5];
for(int i=0;i<arr.length;i++)
arr[i] = i * i;
return arr;
}
}
}
Java 8允许在接口中使用静态方法,Java 9也允许私有方法,因此我们可以使用这样的方法来避免嵌套
class
/enum
:
public interface I {
private static int[] getValues() {
int[] arr = new int[5];
for(int i=0;i<arr.length;i++)
arr[i] = i * i;
return arr;
}
int[] values = getValues();
}
你为什么不尝试一下呢?
public interface Example {
int[] values = { 2, 3, 5, 7, 11 };
}
是的,但前提是它是静态的。事实上,在接口中声明的任何变量都将自动成为静态的。
public interface ITest {
public static String[] test = {"1", "2"}; // this is ok
public String[] test2 = {"1", "2"}; // also ok, but will be silently converted to static by the compiler
}
但是你不能有静态初始化器。
public interface ITest {
public static String[] test;
static {
// this is not OK. No static initializers allowed in interfaces.
}
}
显然,接口中不能有构造函数。
是的,这是可能的。看代码:
public interface Test {
int[] a= {1,2,3};
}
public class Main {
public static void main(String[] args) {
int i1 = Test.a[0];
System.out.println(i1);
}
}
首先,我同意现有的答案。
此外,我认为在接口中定义数据不是一个好主意。 参见《有效的Java》:
第 19 条:仅使用接口来定义类型
一成不变的界面模式是对界面的糟糕使用。
在接口中导出常量是个坏主意。