小编abk*_*srv的帖子

为什么Java不允许创建通用数组?

尝试创建泛型数组的人有很多关于stackoverflow的问题,如下所示:

ArrayList<Foo>[] poo = new ArrayList<Foo>[5];
Run Code Online (Sandbox Code Playgroud)

答案当然是Java规范不允许您声明泛型数组.

我的问题是为什么?在java语言或java vm中,这种限制背后的技术原因是什么?这是我一直想知道的技术好奇心.

java arrays generics

19
推荐指数
2
解决办法
1433
查看次数

继承公共接口的枚举中的代码重复

我有几个符合常见界面的枚举:

    interface TableColumns
    {
      String getColumnName();
      int getColumnIndex();
      ColumnType getColumnType();
      boolean isEditable();
      int getColumnWidth();
    }
Run Code Online (Sandbox Code Playgroud)

典型的实现是:

enum PointsTableColumns implements TrendTableColumns
{
    POINTS_COLUMN("points_column", false, ColumnType.TEXT, 400, 0);

    private String columnName;
    private boolean editable;
    private ColumnType columnType;
    private int columnWidth;
    private int columnIndex;

    private PointsTableColumns (String columnName, boolean editable, ColumnType columnType,
        int columnWidth,
        int columnIndex)
    {
        this.columnName = columnName;
        this.editable = editable;
        this.columnType = columnType;
        this.columnWidth = columnWidth;
        this.columnIndex = columnIndex;
    }

    public boolean isEditable()
    {
        return editable;
    }

    public int getColumnIndex() …
Run Code Online (Sandbox Code Playgroud)

java enums design-patterns

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

Future.cancel()不会取消ScheduledExecutorService的计划执行

我将任务安排为:

ScheduledExecutorService dataService = Executors.newScheduledThreadPool(1);
Future<?> dataTimerHandle = dataService.scheduleAtFixedRate(runnable, 100, freq, TimeUnit.MILLISECONDS);
Run Code Online (Sandbox Code Playgroud)

这工作正常,没有缺陷。

但是,当某个标志变为true用户操作时,便不再需要定期执行任务,而只需执行一次即可。然后,我尝试取消任务并仅提交一次,如下所示:

if(!dynamicUpdate) {
    dataTimerHandle.cancel(true); 
    dataTimerHandle = dataService.submit(runnable);
}
else { //Reschedule again:
    dataTimerHandle = dataService.scheduleAtFixedRate(runnable, 100, freq, TimeUnit.MILLISECONDS);
}
Run Code Online (Sandbox Code Playgroud)

但是似乎可运行对象仍在定期执行并且cancel()未按预期工作。是否有其他替代策略?

java concurrency multithreading executorservice java.util.concurrent

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

具有特定时区的 d3.js 中的时间轴

我正在使用d3.time.scale()(参考此处)创建时间刻度并使用axis.tickValues([values])此处为参考)提供刻度值)。为 [values] 中提供的指定 Date 对象呈现刻度。
一切都很好,但刻度值表示总是在浏览器的当前时区。现在需要在特定时区(例如“亚洲/加尔各答”)中显示它。有没有办法实现这一目标?我看到的 max 选项用于格式化刻度,但不会用自定义值替换它们,这对这种情况没有帮助。

编辑:这可以使用像moment.js这样的外部库来实现,但如果可以避免这种情况,则是首选。

javascript charts datetime d3.js

6
推荐指数
2
解决办法
7488
查看次数

测试依赖项调用的lambda表达式

我试图测试lambda表达式中的一些代码,这是从另一个类的回调.

class EmailSender {
    private EmailBuilder emailBuilder;

    public void send() {
        String testEmail = emailBuilder.buildEmail("Test Email", bodyContentAppender());
        //send testEmail
    }

    private Consumer<Email> bodyContentAppender() {
        //how to test this through JUnit?
        return email -> email.appendBody("Body Content");
    }
}

interface EmailBuilder {

    String buildEmail(String templateName, Consumer<Email> contentAppender);
}
Run Code Online (Sandbox Code Playgroud)

getBodyContent调用方法中的lambda表达式是EmailBuilderJUnit测试中的模拟依赖项EmailSender.由于我在嘲笑行为EmailBuilder,因此getBodyContent不会从测试中调用内部代码.如何测试这样的作品?

编辑: 通过Argument Captors捕获lambda表达式在这种情况下不是解决方案,因为模拟行为EmailBuilder并且不调用实际方法.其次,email.appendBody对一个由外部API传递而不是直接创建的对象进行一些转换.

java lambda junit unit-testing java-8

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

Java中enum的反序列化

Java中枚举类型的默认反序列化被限制为readObjectreadObjectNoDatathrow InvalidObjectException.因此,枚举类型非常适合实现没有任何缺陷的单例类(Item 77,Effective Java,2nd Edition,Bloch).

  • 首先,为什么枚举类型实现Serializable呢?
  • 如何在实践中反序列化枚举引用?

java singleton enums deserialization

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

封闭类型的静态嵌套子类仍然可以引用私有字段成员,为什么?

恕我直言,我发现了一些模棱两可的东西。假设我们有以下类结构:

public class A
{
    private int privateVar = 1;
    protected int protectedVar = 2;

    static class B extends A
    {
        public int getPrivateVariable()
        {
            return privateVar; //error: Cannot make a static reference to the non-static field memberVariable
        }

        public int getProtectedVariable()
        {
            return protectedVar; //OK: Why?
        }

        public int getPrivateUnfair()
        {
            return super.privateVar; //Why this can be accessed using super which the protected member doesn't require.
        }
    }
}
Run Code Online (Sandbox Code Playgroud)
  1. 为什么静态嵌套类可以自由访问实例成员?
  2. 为什么访问方式protected和变量不同?private但是,如果嵌套类是非静态内部类,情况不是这样吗?

编辑:

  1. 为什么允许通过关键字访问封闭类型的私有成员 …

java inheritance inner-classes

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

如何在JUnit测试中测试Collection中元素的排序?

我想用JUnit测试来验证我在Java中的集合的排序算法.如果我将"B","C","A"输入到集合中并希望对其进行排序(例如按字母顺序排列),使用JUnit进行测试的正确方法是什么?

我实现了Comparable接口,并希望确保我的排序正常.

我想这个问题可以扩展到Java或JUnit以外的任何语言的一般测试.

java junit

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

使用 forEachNode 的行选择非常慢

我正在使用 AG Grid React。我有一千行数据。我试图根据它们的索引选择一系列行。

    gridOptions.api.forEachNode(node => {
        if (node.childIndex >= startIndex && node.childIndex < endIndex) {
            node.setSelected(true)
        }
    });
Run Code Online (Sandbox Code Playgroud)

事实证明这是非常糟糕的,通常在 UI 上需要 30 秒。似乎setSelected触发了多个渲染周期。正确的做法是什么?

ag-grid

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