是否可以使用“for”指令在接口中初始化数组?

问题描述 投票:0回答:5

是否可以使用

for
指令在接口中初始化数组?

java arrays for-loop interface initialization
5个回答
7
投票

简单问题 - 是否可以在接口中初始化数组?

是的。

这可行,但我想通过“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();
}

5
投票

你为什么不尝试一下呢?

public interface Example {
    int[] values = { 2, 3, 5, 7, 11 };
}

2
投票

是的,但前提是它是静态的。事实上,在接口中声明的任何变量都将自动成为静态的。

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.
    }
}

显然,接口中不能有构造函数。


2
投票

是的,这是可能的。看代码:

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);
  }
}

1
投票

首先,我同意现有的答案。

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

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

一成不变的界面模式是对界面的糟糕使用。

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

© www.soinside.com 2019 - 2024. All rights reserved.