小编Nar*_*hai的帖子

Singleton实现接口的优势

我在一些博客中读到单例妨碍测试,因为它导致高耦合,而模拟不能代替它,所以解决方案是实现一个接口并在参数中传递它.我没有博客链接,一旦找到它就会附上它.但由于static getInstance()方法不可能.

那么在Singleton Pattern中实现接口有什么优势吗?

public interface SingletonInterface{

   //some methods
}

public class Singleton1 implements SingletonInterface{

   //Usual singleton methods 
}
Run Code Online (Sandbox Code Playgroud)

java singleton design-patterns interface

4
推荐指数
1
解决办法
4597
查看次数

Java基元和原始包装器

我试图了解Java原语和包装器是如何工作的.让我们考虑以下示例.

Integer sum = 0;
for(int i = 0; i < 10000; ++i) {
    sum += i;
}
Run Code Online (Sandbox Code Playgroud)

由于Integer是不可变的并且是非原始的,因此该语句sum += i将被编译为如下

sum =  new Integer(sum.intValue() + i).
Run Code Online (Sandbox Code Playgroud)

这将创建大约10000个Integer对象(每次调用new Integer)以及sum.intValue()将Integer拆箱到int 的成本.

我对吗?

java garbage-collection heap-memory

4
推荐指数
1
解决办法
1069
查看次数

番石榴套装的差异如何?

什么时候被认为是两个不同的对象Sets.difference.当它们有不同的哈希码或者object.equals返回false时.

java guava

4
推荐指数
1
解决办法
5823
查看次数

使用JAXB对Unmarshalling进行排序

假设我有一个XML:

<root>
   <node>
      <order-id>4</order-id>
      .....
   </node>

   <node>
      <order-id>1</order-id>
      ....
   </node>
</root>
Run Code Online (Sandbox Code Playgroud)

当我解组这个xml时,我希望List<Node>我得到的是按order-id值排序.

有没有办法使用JAXB直接获取排序列表?

java jaxb

3
推荐指数
1
解决办法
1368
查看次数

在反射中摆脱未经检查的演员表

我正在使用classloader加载一个类,它返回我Class<?>,现在我想将类传递给另一个方法或函数Class<? extends SomeClass>.

现在,当我尝试施放时:

Class<?> clazzFromClassLoader = Class.forName(nameOfClass);
Class<? extends Someclass> clazz = (Class<? extends SomeClass>)clazzFromClassLoader;
//second line gives unchecked cast warning
Run Code Online (Sandbox Code Playgroud)

我可以通过使用确保没有类强制转换异常

SomeClass.isAssignableFrom(clazzFromClassLoader);
Run Code Online (Sandbox Code Playgroud)

但有没有办法摆脱未经检查的演员表?

java reflection

3
推荐指数
1
解决办法
508
查看次数

以与桌面应用程序相同的方式使用Java Threads是否安全?

Android必须管理线程或可以使用这样的代码:

public class GameThread implements Runnable {

    public void run() {
        while (!finished) {

            //game work

            try {
                Thread.sleep(fps);
            } catch (InterruptedException e) {
                // Interruptions here are no big deal.
            }
        }
    } 
}
Run Code Online (Sandbox Code Playgroud)

java multithreading android

3
推荐指数
1
解决办法
83
查看次数

使用ArrayList#trimToSize()方法?

最近发布的一个问题中,我遇到了ArrayList#trimToSize(),它将支持数组的大小减小到当前的集合大小.

引用javadoc

将此ArrayList实例的容量调整为列表的当前大小.应用程序可以使用此操作来最小化ArrayList实例的存储.

Javadoc说应用程序可以用来减少后备阵列的内存占用.如果我没有错,这种方法对于小尺寸不会有用,因为一些参考的成本不会那么大.

但是由于arraylist int newCapacity = (oldCapacity * 3)/2 + 1;在1.6和int newCapacity = oldCapacity + (oldCapacity >> 1);1.7中使用的算法,当添加新元素if oldcapacity大时,它将创建具有上述算法的新后备数组,并且如果在动态扩展之后仅添加一个元素,则可以分配更多不需要的空间.

我的理由是正确的方法背后还是有其他一些应用程序?

java collections arraylist

3
推荐指数
1
解决办法
1327
查看次数

如何转换.eap文件?

我有一个情况:

我有一个.eap文件,我有一个工具,即StarUML.我需要将.eap文件内容导入StarUML.

基本上,我需要知道如何将其转换.eap为某种格式以导入到StarUML中.(StarUML采用.mfg.xmi作为导入)

提前致谢.

uml converter staruml xmi enterprise-architect

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

java.lang.NoSuchMethodError:org.apache.poi.ss.formula.FormulaParser.parse

我正在尝试使用apache poi使用下面的代码在excel文件中创建一个namged范围.

 private static void createNamedRangesForGeneratedValues(final XSSFWorkbook workBook,                   final String name, final String cellAreaRange) {
        final Name cellRangeName = workBook.createName();
        cellRangeName.setNameName(name);

        final String reference = name + cellAreaRange; // "!A1:C5"; // area reference
        cellRangeName.setRefersToFormula(reference);
Run Code Online (Sandbox Code Playgroud)

但是在这一步: cellRangeName.setRefersToFormula(reference);抛出以下异常.

Exception in thread "main" java.lang.NoSuchMethodError: org.apache.poi.ss.formula.FormulaParser.parse(Ljava/lang/String;Lorg/apache/poi/ss/formula/FormulaParsingWorkbook;II)[Lorg/apache/poi/hssf/record/formula/Ptg;
    at org.apache.poi.xssf.usermodel.XSSFName.setRefersToFormula(XSSFName.java:195)
    at test.java.ExcelSheetDropDownDataHandler.createNamedRangesForGeneratedValues(ExcelSheetDropDownDataHandler.java:186)
    at test.java.ExcelSheetDropDownDataHandler.generateCountryData(ExcelSheetDropDownDataHandler.java:93)
    at test.java.ExcelSheetDropDownDataHandler.generateData(ExcelSheetDropDownDataHandler.java:64)
    at test.java.ExcelSheetDropDownDataHandler.createDataTab(ExcelSheetDropDownDataHandler.java:50)
    at test.java.ExcelSheetDropDownDataHandler.main(ExcelSheetDropDownDataHandler.java:205)
Run Code Online (Sandbox Code Playgroud)

有人可以建议,这可能是什么原因?

java apache-poi

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

Java 类加载器无法在 java.lang.Class 的类上调用 newInstance()

我正在尝试从字节流编写类加载器,但出现此错误。我已经阅读了文档,但我很困惑,因为这不应该发生。这是我要加载的内容:

class LoadedClass {
    public void out(String msg) {
        System.out.println(msg);
    }
}
Run Code Online (Sandbox Code Playgroud)

它存储在一个字节数组中

这是我的类加载器代码:

package byteclassloader;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

class PrintClass extends ClassLoader {
    private String LoadedClass = "cafebabe00000033001e0a0005001309001400150a001600170700180700190100063c696e69743e010003282956010004436f646501000f4c696e654e756d6265725461626c650100124c6f63616c5661726961626c655461626c650100047468697301000d4c4c6f61646564436c6173733b0100036f7574010015284c6a6176612f6c616e672f537472696e673b29560100036d73670100124c6a6176612f6c616e672f537472696e673b01000a536f7572636546696c650100104c6f61646564436c6173732e6a6176610c0006000707001a0c000d001b07001c0c001d000e01000b4c6f61646564436c6173730100106a6176612f6c616e672f4f626a6563740100106a6176612f6c616e672f53797374656d0100154c6a6176612f696f2f5072696e7453747265616d3b0100136a6176612f696f2f5072696e7453747265616d0100077072696e746c6e002000040005000000000002000000060007000100080000002f00010001000000052ab70001b100000002000900000006000100000001000a0000000c000100000005000b000c00000001000d000e00010008000000400002000200000008b200022bb60003b10000000200090000000a00020000000300070004000a00000016000200000008000b000c000000000008000f0010000100010011000000020012";
    private String name = "LoadedClass";

    public Class findClass() {
        byte[] ba = hexStringToByteArray(LoadedClass);
        return defineClass(name, ba, 0, ba.length);
    }

    private static byte[] hexStringToByteArray(String s) {
        int len = s.length();
        byte data[] = new byte[len / 2];

        for( int i = 0; i < len; i+= 2 ) {
            data[i / …
Run Code Online (Sandbox Code Playgroud)

java classloader

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