小编seh*_*seh的帖子

我应该将Jackson的ObjectMapper声明为静态字段吗?

杰克逊图书馆的ObjectMapper课程似乎是线程安全的.

这是否意味着我应该将我声明ObjectMapper为像这样的静态字段

class Me {
    private static final ObjectMapper mapper = new ObjectMapper();
}
Run Code Online (Sandbox Code Playgroud)

而不是像这样的实例级字段?

class Me {
    private final ObjectMapper mapper = new ObjectMapper();
}
Run Code Online (Sandbox Code Playgroud)

java json jackson

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

为什么switch语句需要休息?

给出一个简单的switch语句

switch (int)
{
    case 1 :
    {
        printf("1\n");
        break;
    }

    case 2 : 
    {
        printf("2\n");
    }

    case 3 : 
    {
        printf("3\n");
    }
}
Run Code Online (Sandbox Code Playgroud)

在案例2中没有break语句意味着在案例3的代码中将继续执行.这不是偶然的; 它是这样设计的.为什么做出这个决定?这提供了什么好处与块的自动中断语义?理由是什么?

c language-design

134
推荐指数
6
解决办法
7万
查看次数

如何找出切片中的元素位置?

如何确定切片中存在的元素的位置?

我需要以下内容:

type intSlice []int

func (slice intSlice) pos(value int) int {
    for p, v := range slice {
        if (v == value) {
            return p
        }
    }
    return -1
}
Run Code Online (Sandbox Code Playgroud)

position go slice

96
推荐指数
8
解决办法
8万
查看次数

多态对象层次结构的构建器模式:Java可能吗?

我有一个接口层次结构,有Child实现Parent.我想使用不可变对象,所以我想设计Builder一些方便地构造这些对象的类.但是,我有很多Child接口,我不想Parent在每种类型的子构建器中重复构建s 的代码.

因此,假设以下定义:

public interface Parent {
    public Long getParentProperty();
}

public interface Child1 extends Parent {
    public Integer getChild1Property(); 
}

public interface Child2 extends Parent {
    public String getChild2PropertyA();
    public Object getChild2PropertyB();
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能有效地实施构建器Child1BuilderChild2Builder?他们应该支持以下操作:

Child1 child1 = Child1Builder.newChild1().withChild1Property(5).withParentProperty(10L);
Run Code Online (Sandbox Code Playgroud)

Child2 child2 = Child2Builder.newChild2().withChild2PropertyA("Hello").withParentProperty(10L).withChild2PropertyB(new Object());
Run Code Online (Sandbox Code Playgroud)

我不想withParentProperty为每个子构建器实现特殊情况.

编辑添加第二个属性,Child2以澄清这不能用简单的泛型.我不是在寻找一种方式来组合Child1Child2-我正在寻找一种方式来实现Builder,不重复建设的父类为每个子类的工作体系.

谢谢你的帮助!

java design-patterns builder

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

关于动物园管理员锁定食谱的担忧

在阅读ZooKeeper的锁定配方时,我感到困惑.似乎这个分布式锁定的配方无法保证"任何两个客户端认为它们持有相同锁定的任何快照".但是由于ZooKeeper被如此广泛采用,如果参考文档中存在这样的错误,有人应该在很久以前就指出它,那么我误解了什么呢?

引用分布式锁的配方:

完全分布式锁,全局同步,意味着在任何快照时,没有两个客户端认为它们拥有相同的锁.这些可以使用ZooKeeeper实现.与优先级队列一样,首先定义一个锁定节点.

  1. 使用路径名" locknode/guid-lock-" 调用create(),并设置序列和短暂标志.
  2. 在锁定节点上调用getChildren()而不设置监视标志(这对于避免群体效应很重要).
  3. 如果在步骤1中创建的路径名具有最低序列号后缀,则客户端具有锁,并且客户端退出协议.
  4. 客户端调用exists(),并在lock目录中的路径上设置watch标志,并使用下一个最低序列号.
  5. 如果exists()返回false,则转到步骤2.否则,在转到步骤2之前,等待上一步中路径名的通知.

考虑以下情况:

  • Client1成功获取了锁(在步骤3中),使用ZooKeeper节点"locknode/guid-lock-0";
  • Client2创建了节点"locknode/guid-lock-1",无法获取锁,现在正在观看"locknode/guid-lock-0";
  • 后来,由于某种原因(比如网络拥塞),Client1无法按时向ZooKeeper集群发送心跳消息,但Client1仍在工作,错误地假设它仍然保持锁定.
  • 但是,ZooKeeper可能会认为Client1的会话超时了

    1. 删除"locknode/guid-lock-0",
    2. 向Client2发送通知(或者先发送通知?),
    3. 但无法及时向Client1发送"会话超时"通知(例如,由于网络拥塞).
  • Client2获取通知,转到步骤2,获取它自己创建的唯一节点""locknode/guid-lock-1";因此,Client2假定它持有锁.
  • 但与此同时,Client1认为它持有锁.

这是一个有效的场景吗?

apache-zookeeper

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

什么时候应该抛出InterruptedException,我应该如何处理呢?(阻塞方法)

如果一种方法必须是阻止方法,我是否正确地认为如果我遗漏throws InterruptedException,我犯了一个错误?

简而言之:

  • 阻塞方法应该包括throws InterruptedException另外一种常规方法.
  • 阻塞方法可能会影响响应能力,因为很难预测它何时会完成,这就是它需要的原因throws InterruptedException.

那是对的吗?

java multithreading exception-handling blocking

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

从阵列中删除元素的JSON Patch格式是什么?

我有以下JSON文档,我想从中删除"roles"字段的数组值中的"roleId2"元素:

{
  "id" : 12345,
  "firstName": "SomeFirstName",
  "lastName": "SomeLastName",
  "roles":["roleId1", "roleId2", "roleId3"]
}
Run Code Online (Sandbox Code Playgroud)

如何编写JSON补丁文档来删除该元素?以下表达式是否有效?

{"op": "remove", "path":"/roles", "value": "roleId2"}
Run Code Online (Sandbox Code Playgroud)

或者,它应该是这样的(因为文档中的"角色"值是一个数组)?

{"op": "remove", "path":"/roles", "value": ["roleId2"]}
Run Code Online (Sandbox Code Playgroud)

从阅读RFC 6902,我不清楚哪一个 - 如果 - 是正确的.RFC提到了以下行为,但我不确定它是否与此相关.

如果从数组中删除元素,则指定索引上方的任何元素都会向左移动一个位置.

json-patch

11
推荐指数
2
解决办法
5798
查看次数

如何用Java生成笛卡尔积?

我有一些ArrayList每个ArrayList都有对象,每个可以有不同的长度.我需要生成排列,如下例所示:

假设我有2个arraylist

arraylist A有对象a,对象b和对象c
arraylist B有对象d,对象e

那么输出应该是6个新的arraylist与这个组合:

组合1对象a和对象d,
组合2对象a和对象e,
组合3对象b和对象d,
组合4对象b和对象e,
组合5对象c和对象d,
组合6对象c和对象e,

谁能帮我?

java cartesian-product

8
推荐指数
3
解决办法
6439
查看次数

为什么Java的排序实现在排序之前将列表转换为数组?

在JDK 1.8中,该java.util.List#sort(Comparator)方法的第一个语句如下:

Object[] a = this.toArray();
Run Code Online (Sandbox Code Playgroud)

将列表复制到数组中,对其进行排序,并将列表中的每个节点重置为数组中的排序值是很昂贵的.

在排序时,似乎不可能将值复制到临时数组ArrayList.我对吗?如果没有,是什么引导了该方法的创造者?

java arrays sorting list java-8

8
推荐指数
3
解决办法
899
查看次数

如何使用Java检查SQLite数据库文件是否存在?

我从用户那里得到数据库文件的名称,我想检查该文件是否已经存在.如果确实存在,我想向用户显示错误消息,但我不知道如何检查该文件是否存在.

public static void databaseConnect(String dbName) throws Exception
{
  if (/*same name exists*/) // How do I check this?
  {
    System.out.print("This database name already exists");
  }
  else
  {
    Class.forName("SQLite.JDBCDriver").newInstance();           
    conn = DriverManager.getConnection("jdbc:sqlite:/"+ dbName);
    stat = conn.createStatement(); 
  } 
}
Run Code Online (Sandbox Code Playgroud)

java sqlite database-connection

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