jjzjj

java - 根据 JLS(6.4.2。模糊)的 "obscuring"的代码示例,尤其是这个 "local variable or type can obscure a package"

你能举几个模糊的例子(代码片段)吗?我读了JLS,但我不明白这个概念。JLS没有给出代码示例。隐藏在Base类和Derived类的字段之间。阴影在字段和局部变量之间。模糊-在什么(?)和什么(?)之间旁白:有趣的是,JLS说如果从父类中隐藏相应的字段不会继承:Shadowingisdistinctfromhiding(§8.3,§8.4.8.2,§8.5,§9.3,§9.5),whichappliesonlytomemberswhichwouldotherwisebeinheritedbutarenotbecauseofadeclarationinasubclass.Shadowing

java - 是否可以为另一种注释类型的注释字段指定默认值?

public@interfaceInnerAnnotation{Stringvalue()default"hello";}public@interfaceOuterAnnotation{InnerAnnotationvalue()default???}还有一个案例:public@interfaceAnotherOuterAnnotation{InnerAnnotation[]value()default???UPD:{}} 最佳答案 是的,有可能:public@interfaceInnerAnnotation{Stringvalue

java - 当我在类的构造函数中声明并初始化字段时,为什么我的字段被初始化为 null 或默认值零?

这是针对类似问题的规范问答,其中问题是隐藏的结果。我在我的类中定义了两个字段,一个是引用类型,一个是原始类型。在类的构造函数中,我尝试将它们初始化为一些自定义值。当我稍后查询这些字段的值时,它们会返回Java的默认值,引用类型为null,原始类型为0。为什么会这样?这是一个可重现的例子:publicclassSample{publicstaticvoidmain(String[]args)throwsException{StringArrayarray=newStringArray();System.out.println(array.getCapacity());//prints0S

Java编译器字符串优化

在我看来,编译器将采取这样的做法似乎是合理的:log.info("Areallylongloggermessagethatiskindofapaininthetucous"+"andviolatesformattingstandardsbymakingthelinetolong");并将两个字符串编译成一个。我很确定这是真的,但我想如果有人提出来,让我的鸭子排成一排。 最佳答案 是的,这将由constantexpression处理Java语言规范的一部分。特别参见部分15.18.1.StringConcatenationOperat

java - 用注释标记数组的不同维度

在Java8中我们可以用注解标记数组的不同维度(参见JLS8中的第10.2节)。例如,int@a[]a;int@a[]@b[]a;voidsomeMethod(int@a[]@b...y){}然后我们可以用JavaReflection解析这样的声明来实现一些特定的逻辑。您知道此功能在实际Java框架或Java库中的任何实际应用吗? 最佳答案 这种注释放置可能有用的示例是CheckerFramework.它可以用于创建可变/不可变或(非)可空行-基本上任何您可能想要注释整个数组的内容,但仅限于单个行。Object@NonNull[]@

java - 程序顺序规则在构造函数中起作用之前是否发生?

是否真的可以在构造函数中创建的线程中查看部分构造的对象,因为缺少同步和泄漏this实例?当然,有子类的情况除外,或者我们正在使用克隆或类似的东西进行隐式构造-所以我们假设该类是final并且它是否已完全初始化在调用其他线程之前调用构造函数的线程中。据我所知,以下hb()规则适用,线程中的每个Action先于该线程中的每个Action在程序顺序(ProgramOrderRule)中靠后的顺序线程上对start()的调用发生在已启动线程中的任何操作之前。如果hb(x,y)和hb(y,z),则hb(x,z)那么这是否意味着以下代码在技术上是线程安全的(我从类似的问题Whyshouldn'tI

java - 使具有相同删除二进制文件的通用返回类型兼容吗?

我有以下类(class):publicabstractFoo{Foo(){}publicabstractFoodoSomething();publicstaticFoocreate(){returnnewSomePrivateSubclassOfFoo();}}我想把它改成下面的定义:publicabstractFoo>{Foo(){}publicabstractTdoSomething();publicstaticFoocreate(){returnnewSomePrivateSubclassOfFoo();}}此更改二进制兼容吗?即,针对类的旧版本编译的代码是否可以在不重新编译的情

java - 对一元静态方法的方法引用在 Function 和 BiFunction 参数类型之间不明确

考虑以下简化的测试用例:importjava.util.AbstractList;importjava.util.Collection;importjava.util.Iterator;importjava.util.List;importjava.util.function.BiFunction;importjava.util.function.Function;publicfinalclassExample{staticclassPairList{publicvoidreplaceAllSecond(FunctionsecondFunction){}publicvoidreplac

java - 使用 <T> 的通用方法调用

我对这种通用方法调用的理解有问题:object=ObjectGenerator.getObject(objectName);这是上述情况的上下文:classGenClass{privateTobject;//...somecodepublicvoidinitObject(StringobjectName){object=ObjectGenerator.getObject(objectName);}}classObjectGenerator{publicstaticTgetObject(Stringname){//somecodereturnsomeObject;}}问题是扮演什么角色之

java - 封闭类中的私有(private)枚举和静态字段

我明白为什么枚举构造函数不能访问静态字段和枚举本身中的方法,以及为什么允许使用相同的方法在类里面。以下面的代码为例,importjava.util.ArrayList;importjava.util.List;publicenumFoo{A("Somestring"),B("Someotherstring"),;staticListlist=newArrayList();Foo(Stringdescription){list.add(description);}}此代码导致编译时错误,从初始化程序非法引用静态字段。相关背景枚举构造函数在静态字段拥有所有之前被调用被初始化。在上面的示例中