草庐IT

java - 将本地新对象传递给线程,线程安全吗?

我有一个方法(下面的示例)可以创建一个新列表,将一些内容放入其中,然后将其传递给另一个线程进行操作。这似乎是线程安全的。该列表对于创建它的方法是本地的。该方法对列表进行操作,并且在完成对列表的操作之前不会将其传递给另一个线程。但这感觉是错误的,因为列表是在两个单独的线程中访问的,但它不是同步的。这是可接受的线程安全代码吗?classApp{publicstaticvoidmain(String[]args){finalArrayListlist=newArrayList();list.add(4);list.add(5);finalExecutorServicees=Executors

java - 类型转换中的模棱两可的行为

我在教学生老式泛型时遇到了一个看不见的东西!我在演讲时的行为!:(我有一个简单的类publicclassObjectUtility{publicstaticvoidmain(String[]args){System.out.println(castToType(10,newHashMap()));}privatestaticTcastToType(Vvalue,Ttype){return(T)value;}}这给出输出10,没有任何错误!!!我期待这会给我一个ClassCastException,并出现一些错误,例如IntegercannotbecasttoHashMap。好奇和愤怒,

java - 如何检查击键序列

我正在制作游戏并想实现像Konami代码这样的作弊代码。但是我如何检查击键序列呢?我希望它能正常工作,以便玩家只要输入代码就会触发。提前致谢! 最佳答案 下面是一个检查Konami代码的类,包括“UP、UP、UP、DOWN等情况。”这应该适用于任何给定的序列。importjava.util.Map;importjava.util.TreeMap;publicclassKonami{staticprivateint[]code={UP,UP,DOWN,DOWN,LEFT,RIGHT,LEFT,RIGHT,B};staticprivat

Java 数组列表问题

我有以下Java代码,inta[]=newint[]{20,30};Listlis=Arrays.asList(a);System.out.print(lis.contains(20));但是,输出是错误的。任何人都可以帮助我,为什么这不给True? 最佳答案 您得到的不是整数列表,而是整数数组列表,即List.您不能创建原始类型的集合(如List)。在你的例子中,lis.contains(20)将创建一个Integer对象值为20,并将其与int数组进行比较,这显然不相等。尝试将数组的类型更改为Integer它应该可以工作:Int

Java 三元运算符似乎始终将整数转换为 int

我的一个学生在使用有时会导致null的三元运算符时遇到空指针异常。我想我理解这个问题,但它似乎是由不一致的类型推断引起的。或者换句话说,我觉得这里的语义不一致,在不改变他的方法的情况下应该可以避免错误。这个问题与Anotherquestionaboutternaryoperators相似,但不同。.在那个问题中,必须将nullInteger强制为int,因为函数的返回值是int。但是,在我的学生代码中情况并非如此。这段代码运行良好:Integerx=(5>7)?3:null;x的值为空。没有NPE。在这种情况下,编译器可以计算出三元运算符的结果需要是Integer,因此它将3(一个in

Java 8 列表到嵌套映射

我有一个A类的列表classA{privateIntegerkeyA;privateIntegerkeyB;privateStringtext;}我想将aList传输到由keyA和keyB映射的嵌套Map所以我创建了以下代码。Map>>aMappedByKeyAAndKeyB=aList.stream().collect(Collectors.collectingAndThen(Collectors.groupingBy(A::getKeyA),result->{Map>>nestedMap=newHashMap>>();result.entrySet().stream().forEa

java - 为什么不能在没有花括号的循环中将 int 分配给 Integer?

这个问题在这里已经有了答案:关闭12年前。PossibleDuplicate:WhythisisnotcompilinginJava?在java中,花括号对于一行for循环是可选的,但我发现了一种不允许的情况。例如,这段代码:for(inti=0;i不会编译,但是如果你添加花括号,像这样:for(inti=0;i会的。为什么这段代码不能编译?

java - 在 Java 中将 Integer(可能为 null)转换为 int 的更好方法?

Integer可以是null。我通过以下方式将Integer转换为int:Integerinteger=null;inti;try{i=integer.intValue();}catch(NullPointerExceptione){i=-1;}有没有更好的办法? 最佳答案 对于Java8,以下也适用:Optional.ofNullable(integer).orElse(-1) 关于java-在Java中将Integer(可能为null)转换为int的更好方法?,我们在StackOve

java - Java Boolean 包装器类是如何实例化的?

在java中,我可以这样写代码Booleanb=true;它会起作用的。我现在有一个包含值“true”的对象。这是如何运作的?为什么我不必通过构造函数传递值?像这样:Booleanb=newBoolean(true);此外,我能否创建可以以类似方式实例化的自定义类?如果有,那叫什么?这样我就可以做这样的事情:Foobarfoobar="Test";因此有了我自己的包装器类。谢谢 最佳答案 不,你不能做后者。前者称为autoboxing并在Javav1.5中引入以自动包装,原始包装器中的原语。使用泛型和/或集合时,可以清楚地看到自动装

Java泛型和将数字加在一起

我想在java中一般地添加数字。我遇到了困难,因为Numbers类并不真正支持我想做的事情。到目前为止我尝试过的是:publicclassSummer{publicEsumValue(ListobjectsToSum){Etotal=(E)newObject();for(Enumber:objectsToSum){total+=number;}returnnull;}显然这是行不通的。我该如何着手更正此代码,以便获得的列表?或或其他什么并返回总和? 最佳答案 为了通用地计算总和,您需要提供两个操作:一种对零项求和的方法对两个项目求和