Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 可以在接口中初始化数组吗?_Java_Arrays_Collections_Interface_Initialization - Fatal编程技术网

Java 可以在接口中初始化数组吗?

Java 可以在接口中初始化数组吗?,java,arrays,collections,interface,initialization,Java,Arrays,Collections,Interface,Initialization,可以使用for指令初始化接口中的数组吗?为什么不试试呢 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"

可以使用
for
指令初始化接口中的数组吗?

为什么不试试呢

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);
  }
}
简单的问题-是否可以在接口中初始化数组


这是可行的,但我想通过“for”指令初始化数组。好的,谢谢你的帮助

这不是一个简单的问题;)

您不能严格执行此操作,因为您不能向接口添加静态块。但是您可以有一个嵌套的
枚举

IMHO,这可能会让人困惑而不是有用,如下所示:

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;
        }
    }
}
公共接口I{
int[]values=Init.getValue();
枚举初始化{;
静态int[]getValue(){
int[]arr=新的int[5];

对于(int i=0;i首先,我同意现有的答案

此外,我认为在接口中定义数据不是一个好主意。 参见“有效的Java”:

第19项:仅使用接口定义类型

常量接口模式是对接口的一种拙劣使用


在接口中导出常量是一个坏主意。

这是可行的,但我想通过“for”输入初始化数组。好的,谢谢help@user1555754...Then首先自己尝试一下(使用for循环初始化数组)。我认为在接口中这样做不是一个好做法。接口用于描述行为,而不是状态。@TomislavNovoselec有人可能会说它是常量,而不是状态变量(尽管枚举更适合于此)。当然,总的来说我同意。使用
for
指令对问题有很大的影响。@MikeMyers如果问题看起来太简单,可能意味着OP没有意识到他们需要问一个更深层次的问题。。)是的,这太复杂了。我想创建一个接口的唯一原因是因为我想轻松地引用其他类中的字段。这些字段可以是静态的,所以我认为更好更简单的解决方案是使用静态{}创建类。再次感谢您的帮助。