草庐IT

java - 重构用于测试的静态方法/静态字段

我有以下遗留代码:publicclassMyLegacyClass{privatestaticfinalStringjndiName="java:comp/env/jdbc/LegacyDataSource"publicstaticSomeLegacyClassdoSomeLegacyStuff(SomeOtherLegacyClasslegacyObj){//dostuffusingjndiName}}此类在J2EE容器中工作。现在我想在容器外测试这个类。什么是最好的策略?基本上允许重构。允许访问LegacyDataSource(测试不必是“纯”单元测试)。编辑:不允许引入额外的运行

java - static final char[] 线程安全吗?

如果我有privatestaticfinalchar[]SOME_CHARS;那个线程安全吗?我的意思是,如果我有多个线程引用该数组中的字符(但不更改它们),会出现什么问题吗?例如privateclasssomeThreadextendsThread(){publicvoidrun(){for(inti=0;i换句话说,我是否需要将char[]放入某种支持线程的Java集合中? 最佳答案 如果你在初始化后不更改它们,应该没问题。(请注意,这依赖于它是一个staticfinal变量-初始化类的方式将确保所有线程都能正确看到初始化的数组

java - java中static final transient的作用是什么?

在我正在处理的代码库中,几乎所有声明为staticfinalString的变量也都声明为transient。所以我有这样的字段:publicstaticfinaltransientStringVERSION="1.0";每当我发现这些transient关键字时,我很想删除它们,因为我认为它没有任何用处。在这种情况下,使用或不使用transient在行为上有什么区别吗? 最佳答案 static字段是隐式transient(当序列化一个static字段时,它的值无论如何都会丢失)。所以确实,不需要同时声明两者。

Java:多对象变量(静态)

我是面向对象编码的新手,我遇到了以下问题。(注意this解决方案是我问题的一部分)我需要一个许多对象都可以引用的变量,但要为每个对象保留一些“私有(private)”信息。更具体地说,我创建了一个名为Worker的类,我希望该类的每个对象都有一个int类型的唯一ID。所以,第一个对象有ID=1,第二个对象有ID=2等...请注意,我不想要一个随机整数,而我需要从0和递增...类中变量的声明和初始化staticprivateintworkId=0;我试图通过在构造函数体中添加这行代码来实现自增workId++;我实例化一些对象,将它们添加到ArrayList并使用for循环打印每个对象的

java - 为什么我们允许在 java 中有一个 final main 方法?

谁能告诉我在java中将main方法设置为final的用法。虽然这在java中是允许的publicstaticfinalvoidmain(String[]args){}我看不出将其设为最终版本有任何用处。反正它是静态的,所以我们不能覆盖它。 最佳答案 将final添加到静态方法中实际上可以有所作为。考虑以下代码:classA{publicstaticvoidmain(String[]args){System.out.println("A");}}classBextendsA{publicstaticvoidmain(String[]

java - 静态代码块可以抛出异常吗?

这个问题在这里已经有了答案:Whydoesn'tJavaallowtothrowacheckedexceptionfromstaticinitializationblock?(8个答案)关闭8年前。在假设的情况下,我有一个这样的类:importjava.io.File;importjava.util.Scanner;classX{staticScannerscanner;static{scanner=newScanner(newFile("X.txt"));}}编译时,我得到unreportedexeptionjava.io.FileNotFoundException;mustbeca

java - GSON 是否应该被声明为 static final?

我在代码中使用JavaCallableFuture。下面是我的主要代码,它使用了future和callables-下面是我的主要代码,它使用了future和callables-publicclassTimeoutThread{publicstaticvoidmain(String[]args)throwsException{ExecutorServiceexecutor=Executors.newFixedThreadPool(5);Futurefuture=executor.submit(newTask());try{System.out.println(future.get(3,T

Java 8 : When the use of Interface static methods becomes a bad practice?

从Java8开始,我们可以在接口(interface)中使用默认方法和静态方法。常量接口(interface)模式是对接口(interface)的不良使用,称为常量接口(interface)反模式。>EffectiveJava,第17项:Theconstantinterfacepatternisapooruseofinterfaces.Thataclassusessomeconstantsinternallyisanimplementationdetail.Implementingaconstantinterfacecausesthisimplementationdetailtolea

java - 如何在java中同步静态方法

我在用Java实现单例模式时想到了这个问题。尽管下面列出的示例不是我的真实代码,但与原始代码非常相似。publicclassConnectionFactory{privatestaticConnectionFactoryinstance;publicstaticsynchronizedConnectionFactorygetInstance(){if(instance==null){instance=newConnectionFactory();}returninstance;}privateConnectionFactory(){//privateconstructorimpleme

java - 没有 switch 语句的 Java 工厂

我正在尝试构建一个工厂对象,但无法找到在Java中执行此操作的好方法。我正在编写的应用程序用于处理各种格式的文件,因此有一个CodecInterface适用于所有用于读取和写入文件的类。让我们假设它定义了以下方法。这些文件中的每一个都有一个唯一的人为指定的ID字符串,用于识别编码器\解码器。Stringread();voidwrite(Stringdata);StringgetID();工厂类将有一个create方法,用于创建这些编解码器类的实例。我想方法签名看起来像这样。staticCodecInterfaceCodecFactory.create(Stringfilename,St