小编And*_*niy的帖子

关于在对象的构造函数完成之前对对象的引用

你们每个人都知道JMM的这个特性,有时候对象的引用可以完成这个对象的构造函数之前获得值.

JLS7中,p.17.5 最后的字段语义我们也可以阅读:

final字段的使用模型很简单:final在该对象的构造函数中设置对象的字段; 并且在对象的构造函数完成之前,不要在另一个线程可以看到的地方写入对正在构造的对象的引用.如果遵循这一点,那么当另一个线程看到该对象时,该线程将始终看到该对象的final字段的正确构造版本.(1)

在JLS之后,接下来的示例演示了如何不保证非最终字段的初始化(1Example 17.5-1.1) (2):

class FinalFieldExample { 
    final int x; 
    int y; 

    static FinalFieldExample f;

    public FinalFieldExample() { 
        x = 3; 
        y = 4; 
    } 

    static void writer() { 
        f = new FinalFieldExample(); 
    } 

    static void reader() { 
       if (f != null) { 
           int i = f.x; // guaranteed to see 3 
           int j = f.y; // could …
Run Code Online (Sandbox Code Playgroud)

java concurrency multithreading final jls

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

欺骗JVM关于可用内核的数量(在linux上)

在某些目的中,需要JVM考虑它在具有N核心的机器上运行而不是真实数量的核心(例如4核心而不是核心16).

JVM 在一些基于Mandriva/Red Hat Linux核心的Linux版本下运行.

这个问题是边缘情况,因为我期待这个问题的各种解决方案.这不是纯粹的linux管理问题,也不是纯粹程序员的问题.

所以...任何想法?

linux jvm cpu-cores

13
推荐指数
2
解决办法
3725
查看次数

可选Java 8中flatMap的签名

oracle文档中,它似乎是

<U> Optional<U> flatMap(Function<? super T,Optional<U>> mapper)
Run Code Online (Sandbox Code Playgroud)

对于mappera Function,它使参数反变,但不使返回类型协变.我想知道是否mapper可以(应该)

Function<? super T,Optional<? extends U>>
Run Code Online (Sandbox Code Playgroud)

要么

Function<? super T, ? extends Optional<? extends U>>
Run Code Online (Sandbox Code Playgroud)

java optional java-8

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

ZonedDateTime比较:预期:[Etc/UTC]但是:[UTC]

我正在比较似乎相同的两个日期,但它们包含不同的区域名称:一个是Etc/UTC,另一个是UTC.

根据这个问题:UTC和Etc/UTC时区之间有区别吗? - 这两个区域是相同的.但我的测试失败了:

import org.junit.Test;
import java.sql.Timestamp;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import static org.junit.Assert.assertEquals;

public class TestZoneDateTime {

    @Test
    public void compareEtcUtcWithUtc() {
        ZonedDateTime now = ZonedDateTime.now();
        ZonedDateTime zoneDateTimeEtcUtc = now.withZoneSameInstant(ZoneId.of("Etc/UTC"));
        ZonedDateTime zoneDateTimeUtc = now.withZoneSameInstant(ZoneId.of("UTC"));

        // This is okay
        assertEquals(Timestamp.from(zoneDateTimeEtcUtc.toInstant()), Timestamp.from(zoneDateTimeUtc.toInstant()));
        // This one fails
        assertEquals(zoneDateTimeEtcUtc,zoneDateTimeUtc);

        // This fails as well (of course previous line should be commented!)
        assertEquals(0, zoneDateTimeEtcUtc.compareTo(zoneDateTimeUtc));
    }
}
Run Code Online (Sandbox Code Playgroud)

结果:

java.lang.AssertionError: 
Expected :2018-01-26T13:55:57.087Z[Etc/UTC]
Actual   :2018-01-26T13:55:57.087Z[UTC]
Run Code Online (Sandbox Code Playgroud)

更具体地说,我希望,这ZoneId.of("UTC")将等于ZoneId.of("Etc/UTC"),但它们不是!

正如@NicolasHenneaux …

java datetime date datetime-comparison zoneddatetime

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

在Java中重定向ip

在过去的几个星期里,我一直在搜索互联网,计算机程序员的思想,以及一些随机的人在我想要克服的情况.基本上,我试图做到这一点写AntiJoinBot"插件"(如果你愿意)流行的游戏的Minecraft.这就像所有其他人一样,它根据是否使用代理来阻止IP,但是这个AntiJoinBot运行在与实际服务器不同的VPS上.

这是我能够对情况做出的最佳图表(它不是那么好):

(非Minecraft服务器)连接 - >代理检查 - >重定向到服务器 - > Minecraft

唯一的问题是,我需要能够重定向IP并关闭连接,以便播放器的真实IP是连接到服务器的IP.如果无法关闭连接,则由于我们正在运行的某些插件而导致实际问题.

如果您有解决方案或更好的方法,请帮助我.

java ip proxy redirect

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

使用反射调用带有数组参数的方法

我试图编写一个方法,通过将一个字符串数组作为参数传递给该方法,从另一个类执行静态方法.

这就是我所拥有的:

public static void
executeStaticCommand(final String[] command, Class<?> provider)
{
    Method[] validMethods = provider.getMethods();

    String javaCommand = TextFormat.toCamelCase(command[0]);

    for (Method method : validMethods) {
        if (method.getName().equals(javaCommand)) {
            try {
                method.invoke(null, new Object[] { new Object[] { command } });
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (InvocationTargetException e) {
                Throwable ex = e.getCause();
                ex.printStackTrace();
            }
            break;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这样:

String[] args = new String[] { "methodName", "arg1", "arg2" }; 
executeStaticCommand(args, ClassName.class);
Run Code Online (Sandbox Code Playgroud)

应执行此操作:

public class ClassName {
    public …
Run Code Online (Sandbox Code Playgroud)

java reflection method-invocation

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

Objects.deepEquals方法的含义

问题是静态方法Objects.deepEquals类(自Java 7):

public static boolean deepEquals(Object a, Object b) {
    if (a == b)
        return true;
    else if (a == null || b == null)
        return false;
    else
        return Arrays.deepEquals0(a, b);
}
Run Code Online (Sandbox Code Playgroud)

正如它在javadoc这种方法中所说:

如果参数彼此深度相等则返回true,否则返回false.

我不明白:比较的深度在哪里?正如我们在其实现中看到的那样,它只是进行引用比较,而Arrays.deepEquals0(a, b)对于简单ObjectObject参数,它只调用:eq = e1.equals(e2);.那么两种物体在什么样的意义上是完全相同的呢?

java

12
推荐指数
2
解决办法
4722
查看次数

如何使用Spring RestTemplate压缩压缩HTTP请求?

如何gzip 创建的HTTP 请求org.springframework.web.client.RestTemplate?

我正在使用Spring 4.2.6Spring Boot 1.3.5(Java SE,而不是Android或Javascript在Web浏览器中).

我正在做一些非常大的POST请求,我希望压缩请求体.

java spring http http-compression

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

Enum的values()方法访问级别

JLS 8 声明每个枚举类都隐式声明了方法:

public static E[] values();
Run Code Online (Sandbox Code Playgroud)

所以,它是public按规格.

同时Class.getEnumConstantsShared()方法强制使其可访问:

            final Method values = getMethod("values");
            java.security.AccessController.doPrivileged(
                new java.security.PrivilegedAction<Void>() {
                    public Void run() {
                            values.setAccessible(true);
                            return null;
                        }
                    });
            @SuppressWarnings("unchecked")
            T[] temporaryConstants = (T[])values.invoke(null);
Run Code Online (Sandbox Code Playgroud)

我在想:这是什么意思?

java reflection enums

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

Java 8 lambda和alpha等价

我想知道,在Java-8中实现alpha等价比较是否有任何好的方法(如果可能的话)?

显然,这两个lambda-s是α等价的.让我们假设在某些情况下我们想要发现这个事实.如何实现?

Predicate<Integer> l1 = x -> x == 1;
Predicate<Integer> l2 = y -> y == 1;
Run Code Online (Sandbox Code Playgroud)

java lambda lambda-calculus java-8

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