为什么我们不能在 INTERFACE 的静态块内分配变量?亚奥理事会
Why we can't assign a variable inside a static block in INTERFACE ? OCA
我读到在接口中定义的常量值是隐式的 public、静态的和 final.If 那么为什么我们不能在静态块的接口内分配它的值.我们可以在静态块中的 类 中做同样的事情。
接口示例:[抛出错误]
interface Test{
int x;
static{
x=20;
}
}
Class 示例:[工作正常]
class Test{
public static final int x;
static{
x=20;
}
}
请告诉我这种行为的原因?
如果您发现此问题重复,请标记它以便我检查。
接口没有初始化器。所以您不能使用 static
或实例块进行初始化。对于这些情况,您可以使用 abstract
class。
Every declarator in a field declaration of an interface must have a variable initializer, or a compile-time error occurs.
规范只需要初始化程序。
一般来说,接口用于定义某个class通过实现它应该具有的功能。所以我不确定在接口内部分配值是可行的方法。
class Test implements yourInterface {
@Override
function myInterfaceFunction() {
// code goes here
}
}
也许您可以解释一下您要实现的目标以及为什么需要该界面。
Java 语言规范确实只允许 变量初始值设定项。
这可能是经过深思熟虑的设计决定。引入了接口,classes 仅限于单继承,因为在 C++ 中,多继承创造了浑水;现在已在 C++ 中解决,但代码可读性不强,并且
用途非常有限。
在静态初始化器中可以做各种事情,比如 System.out.println
和 for
循环。他们可能确实想要纤薄的界面。当然不是正常的初始值设定项 { }
(= 某种方式的多重继承:评估构造函数的顺序)。也许有人可以判断 class 在接口中加载静态初始值设定项是否会带来开销。
我读到在接口中定义的常量值是隐式的 public、静态的和 final.If 那么为什么我们不能在静态块的接口内分配它的值.我们可以在静态块中的 类 中做同样的事情。
接口示例:[抛出错误]
interface Test{
int x;
static{
x=20;
}
}
Class 示例:[工作正常]
class Test{
public static final int x;
static{
x=20;
}
}
请告诉我这种行为的原因? 如果您发现此问题重复,请标记它以便我检查。
接口没有初始化器。所以您不能使用 static
或实例块进行初始化。对于这些情况,您可以使用 abstract
class。
Every declarator in a field declaration of an interface must have a variable initializer, or a compile-time error occurs.
规范只需要初始化程序。
一般来说,接口用于定义某个class通过实现它应该具有的功能。所以我不确定在接口内部分配值是可行的方法。
class Test implements yourInterface {
@Override
function myInterfaceFunction() {
// code goes here
}
}
也许您可以解释一下您要实现的目标以及为什么需要该界面。
Java 语言规范确实只允许 变量初始值设定项。
这可能是经过深思熟虑的设计决定。引入了接口,classes 仅限于单继承,因为在 C++ 中,多继承创造了浑水;现在已在 C++ 中解决,但代码可读性不强,并且 用途非常有限。
在静态初始化器中可以做各种事情,比如 System.out.println
和 for
循环。他们可能确实想要纤薄的界面。当然不是正常的初始值设定项 { }
(= 某种方式的多重继承:评估构造函数的顺序)。也许有人可以判断 class 在接口中加载静态初始值设定项是否会带来开销。