小编Rin*_*nke的帖子

覆盖 Clone 而不调用 super.clone

clone不实现 Cloneable 接口和不调用 super.clone() 的情况下重写方法是否是一个好习惯。这样,CloneNotSupportedException就不会抛出异常。

考虑这个类:

class Money {

    private BigDecimal x ;

    public Object clone() {
        Money m1 = new Money();
        m1.setX(this.x);
        return m1;
    }

    public BigDecimal getX() {
        return x;
    }

    public void setX(BigDecimal x) {
        this.x = x;
    }

}        
Run Code Online (Sandbox Code Playgroud)

这个类不会抛出CloneNotSupportedException,它就像一个复制构造函数。

这是一个好方法吗?

java clone

7
推荐指数
2
解决办法
3881
查看次数

如何持久化EnumSet(使用两个数据库表)?

我想在我的实体中将一组选项表示为EnumSet,并在我的数据库中表示为一对多关系.这怎么做得好?我只能找到不使用两个表的旧(预注释)答案或答案.

我定义了以下表格:

CREATE TABLE Users (
    id                      SERIAL PRIMARY KEY,
    name                    VARCHAR(255) NOT NULL UNIQUE
);

CREATE TABLE User_Options (
    user_id                 INT,
    user_option             VARCHAR(255),
    PRIMARY KEY (user_id, user_option),
    FOREIGN KEY (user_id) REFERENCES Users(id)
                ON DELETE CASCADE
                ON UPDATE CASCADE
);
Run Code Online (Sandbox Code Playgroud)

这个实体类:

@Entity(name = "Users")
public final class User {

    @Id
    @GeneratedValue
    private int id;

    @Column(nullable = false, unique = true)
    private String name;

    private final Set<UserOption> options;

    {
        this.options = EnumSet.noneOf(UserOption.class);
    }

    /* plain getter for id included */

    /* …
Run Code Online (Sandbox Code Playgroud)

java enums persistence hibernate jpa

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

在Java中重定向子进程的I/O(为什么ProcessBuilder.inheritIO()不工作?)

我正在以下列方式启动一个过程.

try {
    final Process mvnProcess = new ProcessBuilder("cmd", "/c", "mvn", "--version")
            .directory(new File(System.getProperty("user.dir")))
            .inheritIO()
            .start();
    System.exit(mvnProcess.waitFor());
} catch (final IOException ex) {
    System.err.format(IO_EXCEPTION);
    System.exit(1);
} catch (final InterruptedException ex) {
    System.err.format(INTERRUPTED_EXCEPTION);
    System.exit(1);
}
Run Code Online (Sandbox Code Playgroud)

自从我调用后,inheritIO()我期待控制台上的子进程输出,但什么都没有出现.我在这里错过了什么?

编辑:我知道我可以mvnProcess.getInputStream()显式地使用和读取进程的输出,将其写入循环中的控制台(或其中).我不喜欢这个解决方案,因为循环会阻塞我的线程.inheritIO()看起来很有希望,但显然我不明白它是如何工作的.我希望有人可以对此有所了解.

java io process

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

我可以从arbritrary阶段恢复Maven生命周期吗?

我想说服Maven"继续它离开的地方".我首先做一个mvn package构建包.稍后我可能希望通过执行a来继续生命周期来进行集成测试等mvn install.在这种情况下,我希望Maven不要从一开始就重新开始生命周期,而是在第一阶段package(即pre-integration-test)之后重新开始.是否有可能在第一阶段以外的阶段开始生命周期?

java maven continuous-delivery

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

如何使用带引号的字段(可能包含分隔符)对 CSV 进行排序

在 shell 脚本中,我试图对 CSV 文件进行排序。某些字段可能包含分隔符并被引用以正确处理此问题。假设我有一个文件:

"2",D,Clair
1,R,Alice
"3","F","Dennis"
2,"P,F",Bob
Run Code Online (Sandbox Code Playgroud)

我想在第一列上排序,然后是第三列。结果应该是:

1,R,Alice
2,"P,F",Bob
"2",D,Clair
"3","F","Dennis"
Run Code Online (Sandbox Code Playgroud)

字段中也可能有转义的双引号。通常,CSV 将符合RFC 4180

我试图用 a 来做到这一点,sort -t , -k 1,1 -k 3,3但这不起作用,因为sort不知道 CSV 中引号的特殊含义。我找不到一种方法来sort表现这种方式。也许我应该使用另一个命令,但我找不到任何命令。

如何对我的 CSV 进行排序?

unix linux shell posix sh

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

JAX-RS客户端对Java8日期/时间进行Jackson(反)序列化

我正在为REST端点创建一个服务客户端,将JAX-RS客户端用于HTTP请求,并使用Jackson来(反)序列化JSON实体。为了处理JSR-310(Java8)日期/时间对象,我将该com.fasterxml.jackson.datatype:jackson-datatype-jsr310模块作为对服务客户端的依赖项添加,但是我没有使它起作用。

如何配置JAX-RS和/或Jackson使用jsr310模块?

我使用以下依赖项:

<dependency>
  <groupId>javax.ws.rs</groupId>
  <artifactId>javax.ws.rs-api</artifactId>
  <version>${jax-rs.version}</version>
</dependency>
<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-annotations</artifactId>
  <version>${jackson.version}</version>
</dependency>
<dependency>
  <groupId>com.fasterxml.jackson.datatype</groupId>
  <artifactId>jackson-datatype-jsr310</artifactId>
  <version>${jackson.version}</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

我不想使服务客户端(以库形式发布)依赖于任何特定的实现(例如Jersey),因此我仅依赖于JAX-RS API。为了运行集成测试,我添加了:

<dependency>
  <groupId>org.glassfish.jersey.core</groupId>
  <artifactId>jersey-client</artifactId>
  <version>${jersey.version}</version>
  <scope>test</scope>
</dependency>
<dependency>
  <groupId>org.glassfish.jersey.inject</groupId>
  <artifactId>jersey-hk2</artifactId>
  <version>${jersey.version}</version>
  <scope>test</scope>
</dependency>
<dependency>
  <groupId>org.glassfish.jersey.media</groupId>
  <artifactId>jersey-media-json-jackson</artifactId>
  <version>${jersey.version}</version>
  <scope>test</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)

JAX-RS客户端的实例化是在工厂对象中完成的,如下所示:

import javax.ws.rs.Produces;
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;

@Produces
public Client produceClient() {
    return ClientBuilder.newClient();
}
Run Code Online (Sandbox Code Playgroud)

典型的DTO如下所示:

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;

import java.time.Instant;

import static java.util.Objects.requireNonNull;

@JsonPropertyOrder({"n", "t"})
public final class Message {

    private final String name;
    private final …
Run Code Online (Sandbox Code Playgroud)

java json jax-rs jackson jsr310

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

如何在SVG中定义具有无理坐标的点?

假设我想在svg中绘制一个sqare,其对角线为1.这意味着正方形的边长度为a = 1/sqrt(2).方形的顶点的坐标,然后将是:(0,0),(0,a),(a,0)(a,a).当然我可以a用十进制数近似并使用这个数字.但是,如果我希望顶点在数学上是精确的,例如因为我希望它们完全在某条线上,我知道要经过预期的点?

我是SVG的新手.我正在阅读这里的转换,希望得到一些指示,但它让我感到困惑.

有谁知道这是否可以做到,如果可以,怎么做?

svg

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

在Java中优化for循环是否有用?

可能重复:
for循环优化

假设我们想循环遍历字符串的字符s.我会说以下代码或多或少是默认代码.

for( int i = 0; i < s.length(); i++ ) {
    doSomethingWith( s.charAt( i ) );
}
Run Code Online (Sandbox Code Playgroud)

问题1:为什么我经常看到以下内容?

final int length = s.length();
for( int i = 0; i < length; i++ ) {
    doSomethingWith( s.charAt( i ) );
}
Run Code Online (Sandbox Code Playgroud)

乍一看,这似乎是合理的,因为在每次迭代时都会评估不等式.但是我希望VM能够优化它,因为字符串是不可变的.有什么想法吗?如果我们迭代一个可变结构(没有被任何其他线程引用)会怎样?如果length()不能保证在O(1)中运行怎么办?

问题2:有些人认为代++ii++速度可达代码.他们是对的吗?这不是我所期望的,但我只是不确定.

我们都知道不要过早优化.与此同时,如果我们几乎不用任何代价就可以生成稍微快一点的代码,那么我们就不会傻了.当然,人们可能会争辩说,两种"优化"都会损害可读性,但在我看来,损害是如此之小,以至于在某些情况下这种损害是合理的.

我试图衡量性能上的任何差异,但很难得出确凿的结果.虽然这应该适用于任何特定的应用程序,但我的目标是洞察力和一般答案.

(虽然我在考虑HotSpot VM的情况下编写了这个内容,但考虑其他平台,如移动设备也会很有趣.)

java optimization for-loop

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

从Interface <Type>到Interface <Subtype>的适配器

请考虑以下界面.

public interface Feed<T> {

    public void put( T o );

}
Run Code Online (Sandbox Code Playgroud)

我们有一个简单的Java类来实现这个接口,它将对象写入特定的集合.

public class CollectionFiller<T> implements Feed<T> {

    private final Collection<T> collection;

    private CollectionFiller( Collection<T> collection ) {
        this.collection = collection;
    }

    public void put( T o ) {
        this.collection.add( o );
    }

    public static <T> CollectionFiller<T> of( Collection<T> collection ) {
        return new CollectionFiller<T>( collection );
    }

}
Run Code Online (Sandbox Code Playgroud)

现在我们定义两个虚拟类,以使问题具体化.

public class Super {}

public class Sub extends Super {}
Run Code Online (Sandbox Code Playgroud)

比方说,有一些方法writeSubsTo( Feed<Sub> f ),我们有一个实例cfCollectionFiller<Super> …

java generics casting wrapper

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

Jersey 使用什么样的日志记录以及如何使用 Logback 拦截它?

我想用 Logback 拦截 Jersey 的日志记录,但我不确定如何。有人可以指点一下吗?

java logging jersey logback

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

除标题之外的反向行顺序

使用shell命令,我想要反转文本文件的行,不包括标题行.

Number,Letter,Person
1,a,Alice
2,b,Bob
3,c,Claire
Run Code Online (Sandbox Code Playgroud)

应该成为

Number,Letter,Person
3,c,Claire
2,b,Bob
1,a,Alice
Run Code Online (Sandbox Code Playgroud)

我在寻找两个 "就地"解决方案(修改原文件)和流媒体解决方案(从stdin读取和打印结果原来的文件到标准输出).

理想情况下,命令或脚本与POSIX兼容,但其他解决方案也可能很有趣.一个oneliner会很好.

我也对任何解决方案的性能/复杂性感兴趣.

unix shell awk posix

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