小编CKi*_*ing的帖子

检查Java中三个或更多字符串的相等性

我知道这是一个非常基本的问题,但我总是想方设法让我的代码尽可能简洁明了.有没有办法比较一个if()语句中三个或更多字符串的相等性?我目前正在使用&&运算符逐步比较每个字符串.但是,正如您可以想象的那样,在调用长变量名和方法之间,这些if()语句会非常快速地混乱.另外,我计划使用未知数量的这些字符串,并且希望避免复杂的for循环,其中if()嵌套了混乱的字符串.这是我的代码目前的样子:

String a = new String("a");
String b = new String("b");
String c = new String("c");
if(a.equals(b) && b.equals(c)) {
    doSomething();
}
Run Code Online (Sandbox Code Playgroud)

有没有办法,或者我可以使用某种类型的集合,这样我就可以比较这些值:

if(a.equals(b).equals(c)) {
    doSomething();
}
Run Code Online (Sandbox Code Playgroud)

java string if-statement compare

12
推荐指数
2
解决办法
2万
查看次数

为什么对隐藏的静态方法强制执行返回类型协方差?

由于in 的String返回类型,此代码将无法编译.staticMethodChild

class Parent {
    static void staticMethod() {    
    }
}

class Child extends Parent {
    static String staticMethod() {
        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

我知道§8.4.8.3中的JLS 8,"覆盖和隐藏的要求"说:

如果具有返回类型R1的方法声明d1覆盖或隐藏具有返回类型R2的另一个方法d2的声明,则对于d2,d1必须是return-type-substitutable(第8.4.5节),否则会发生编译时错误.

我的问题是在静态方法的特定情况下进行编译时检查的动机是什么,这个例子说明在编译期间未能进行此验证会产生任何问题是理想的.

java jls

12
推荐指数
1
解决办法
512
查看次数

Collections.sort使用什么设计模式?

以下列方式将比较器应用于列表时,使用的设计模式是什么或此处使用的技术是什么?

Collections.sort(myCollection, new Comparator<MyItem>() {

    @Override
    public int compare(MyItem item1, MyItem item2) {
        return item1.getId().compareTo(item2.getId());
    }

});
Run Code Online (Sandbox Code Playgroud)

java oop collections polymorphism design-patterns

10
推荐指数
2
解决办法
6068
查看次数

如何配置Apache CXF通过非Spring配置文件使用单个JAXBContext?

我已经读过,跨多个线程共享一个JAXBContext对象可以大大降低使用JAXB的应用程序的CPU使用率.这方面的一个证明就是这里.我们目前正在使用Apache CXF来开发Web服务.Apache CXF默认使用JAXB.

  • 根据,阿帕奇CXF可以被配置为通过一个配置文件来使用的JAXBContext的单个实例.
  • 根据这个,我们可以提供一个配置文件CXF.此配置文件是Spring配置文件.
  • 根据,Apache的CXF可以不用弹簧配合使用.

鉴于以上信息,如何在不使用基于Spring的配置文件的情况下将Apache CXF配置为使用单个JAXBContext,因为我正在查看使用没有Spring的servlet传输的代码库?是否可以为JAXBContext添加任何其他配置参数以进一步提高性能?

java web-services cxf jaxb

9
推荐指数
1
解决办法
2769
查看次数

在Stream和Collections API之间进行选择

请考虑以下示例:在以下位置打印最大元素List:

List<Integer> list = Arrays.asList(1,4,3,9,7,4,8);           
list.stream().max(Comparator.naturalOrder()).ifPresent(System.out::println);
Run Code Online (Sandbox Code Playgroud)

使用该Collections.max方法也可以实现相同的目标:

System.out.println(Collections.max(list));
Run Code Online (Sandbox Code Playgroud)

上面的代码不仅更短,而且阅读更清晰(在我看来).有一些类似的例子可以想到,例如使用binarySearchvs filter与之结合使用findAny.

我知道这 Stream可能是一个无限的管道,而不是Collection受JVM可用内存的限制.这将是我决定是使用API Stream还是使用CollectionsAPI的标准.是否还有其他原因选择StreamCollectionsAPI(如性能).更一般地说,这是选择Stream能够以更简洁的方式完成工作的旧API 的唯一理由吗?

java collections java-8 java-stream

9
推荐指数
1
解决办法
1774
查看次数

引用何时需要是原子的?

在Java中以原子方式分配引用意味着什么?

  • 我明白这对于long和double意味着什么,即:一个线程可以看到部分构造的数字,
  • 但对于一个我不理解的对象,因为赋值并不意味着复制只是指向内存中的地址

那么,如果引用赋值在Java中不是原子的,那会是什么错误?

java multithreading

9
推荐指数
3
解决办法
1785
查看次数

在Eclipse中ctrl + click的反义词是什么?

在Eclipse中按Ctrl +单击将传递给所选函数的代码.

什么是"撤消"命令?在我按Ctrl + Click后如何自动返回到我所在的位置?

java eclipse

9
推荐指数
1
解决办法
950
查看次数

Java 8默认方法可读性

Java 8引入了默认方法的概念.请考虑以下具有默认方法的接口:

public interface IDefaultMethod {

    public abstract void musImplementThisMethod();
    public default void mayOrMayNotImplementThisMethod() {
        System.out.println(" This method is optional for classes that implement this interface ");
    }

}
Run Code Online (Sandbox Code Playgroud)

以及实现此接口的类:

    public class DefaultMethodImpl implements IDefaultMethod {

        @Override
        public void musImplementThisMethod() {
                System.out.println("This method must be implementd ");
        }


        @Override
        public void mayOrMayNotImplementThisMethod() {
            // TODO Auto-generated method stub
            IDefaultMethod.super.mayOrMayNotImplementThisMethod();
        }

}
Run Code Online (Sandbox Code Playgroud)

我对以下调用的可读性有疑问mayOrMayNotImplementThisMethod:

IDefaultMethod.super.mayOrMayNotImplementThisMethod();
Run Code Online (Sandbox Code Playgroud)

我理解在上面的调用中明确指定接口名称的原因是为了避免在类实现的多个接口具有相同方法的情况下混淆.我不明白的是super这个上下文中关键字的含义.当我们说IDefaultMethod.super,我们究竟指的是什么?不会IDefaultMethod.mayOrMayNotImplementThisMethod()比IDefaultMethod.super.mayOrMayNotImplementThisMethod()更具可读性吗?删除super关键字使其更具可读性,代价是区分静态或非静态方法调用.

java default-method

8
推荐指数
2
解决办法
813
查看次数

父类和实现接口中具有相同名称的静态和非静态方法

我不是在询问界面和抽象类之间的区别.

它是单独的成功,对吗?

interface Inter {
    public void fun();
}

abstract class Am {
    public static void fun() {
        System.out.println("Abc");
    }
}

public class Ov extends Am implements Inter {
    public static void main(String[] args) {
        Am.fun();
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么会发生冲突?

java inheritance static-methods

8
推荐指数
1
解决办法
3745
查看次数

与通用签名接口的静态方法

从Java 8开始,您可以在Interfaces中实现默认或静态方法,如下所示

public interface DbValuesEnumIface<ID, T extends Enum<T>> {
   T fromId(ID id);

   ID getId();
   static String getDescriptionKey(){
      return "this is a test";
   }
}
Run Code Online (Sandbox Code Playgroud)

我想声明上面的静态方法,其签名使用实现类定义的边界,因为方法的实现应该对所有人都相同,唯一不同的应该是声明的泛型,如下:

public interface DbValuesEnumIface<ID, T extends Enum<T>> {

   public static T fromId(ID id) {
        if (id == null) {
            return null;
        }
        for (T en : T.values()) {
            if (en.getId().equals(id)) {
                return en;
            }
        }
    }

    ID getId();

    String getDescriptionKey();
}
...
public enum Statuses implements DbValuesEnumIface<Integer,Statuses>
Run Code Online (Sandbox Code Playgroud)

因为T和ID不是静态的而且不能从静态上下文引用而中断.

那么,如何修改以上内容以便成功编译,如果不可能,应如何实现上述目标以实现所需目的,同时避免实现类中的代码重复.

java generics static interface java-8

8
推荐指数
1
解决办法
1918
查看次数