小编Wua*_*ner的帖子

隐藏Java继承中的字段

在类中,与超类中的字段具有相同名称的字段会隐藏超类的字段.

public class Test {

    public static void main(String[] args) {

        Father father = new Son();
        System.out.println(father.i); //why 1?
        System.out.println(father.getI());  //2
        System.out.println(father.j);  //why 10?
        System.out.println(father.getJ()); //why 10?

        System.out.println();

        Son son = new Son();
        System.out.println(son.i);  //2 
        System.out.println(son.getI()); //2
        System.out.println(son.j); //20
        System.out.println(son.getJ()); //why 10?
    }  
}

class Son extends Father {

    int i = 2;
    int j = 20;

    @Override
    public int getI() {
        return i;
    }
}

class Father {

    int i = 1;
    int j = 10;

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

java polymorphism inheritance field member-hiding

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

Java - 实现循环循环List,并计算元素的访问计数?

场景:


对于包含3个元素[A,B,C]的列表:

您可以根据需要循环访问它.并且还有一个额外的计数功能记录每个元素的访问计数.

例如,如果访问它7次,应返回:


    [A, B, C, A, B, C, A]

并具有以下每个元素的访问计数:


    +–––––––––––+–––––––––––––––+
    |  Element  |  Access count |
    +–––––––––––––––––––––––––––+
    |     A     |       3       |
    +–––––––––––––––––––––––––––+
    |     B     |       2       |
    +–––––––––––––––––––––––––––+
    |     C     |       2       |
    +–––––––––––+–––––––––––––––+

任何回应将不胜感激.

问候.


更新


添加另一个允许调用者指定应该过滤的元素列表的附加函数.仍然使用7次访问作为示例,过滤[C]:


    [A, B, A, B, A, B, A]


    +–––––––––––+–––––––––––––––+
    |  Element  |  Access count |
    +–––––––––––––––––––––––––––+
    |     A     |       4       |
    +–––––––––––––––––––––––––––+
    |     B     |       3       |
    +–––––––––––––––––––––––––––+
    |     C     |       0       |
    +–––––––––––+–––––––––––––––+

并且,随后对getNextOne()的调用应始终获取访问计数低的模拟(模拟负载平衡的访问计数实现).因此,如果第二个调用者尝试访问它10次,则应返回:


    [C, C, C, …

java iterator load-balancing round-robin circular-list

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

@Interceptors和@InterceptorBinding + @Logged之间的区别?

似乎有两种方法将拦截器绑定到目标类/方法:

  1. 目标类/方法的@Interceptors
  2. 声明一个interceptor binding type(也就是用@InterceptorBinding本身注释的自定义注释,例如@Logged),并在目标类/方法上使用它

我在CDI环境中使用拦截器.我的问题是,interceptor binding type如果我使用@Interceptors将拦截器绑定到我的目标方法,是否完全没有必要声明一个额外的?

如果答案是肯定的,那么为什么IntelliJ IDEA经常向我提出错误

@Interceptor必须至少指定一个拦截器绑定

当我没有interceptor binding type在拦截器上注释时?

如果答案是否定的,我已经将拦截器与@Interceptors(arrayOfMyInceptor)直接绑定到目标类/方法,为什么要声明一个额外的interceptor binding type并在我的拦截器上使用它?


我在网上搜索但是找不到这两种方法的差异,希望SO可以解决我的问题.

感谢您的耐心等待.

java annotations intellij-idea interceptor cdi

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

使用restTemplate时线程被阻塞

我遇到一个问题,当使用 Spring 的 RestTemplate 与远程服务器通信时,我的应用程序的线程已锁定/阻塞。

这是一个被阻塞线程的 jstack 信息:

"pool-1-thread-8" prio=10 tid=0x00007fbfd012d800 nid=0x27b1 runnable [0x00007fbfd7dfb000]
   java.lang.Thread.State: RUNNABLE
        at java.net.SocketInputStream.socketRead0(Native Method)
        at java.net.SocketInputStream.read(SocketInputStream.java:129)
        at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
        at java.io.BufferedInputStream.read1(BufferedInputStream.java:258)
        at java.io.BufferedInputStream.read(BufferedInputStream.java:317)
        - locked <0x00007fbfe40fe1f8> (a java.io.BufferedInputStream)
        at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:687)
        at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:632)
        at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1072)
        - locked <0x00007fbfe40fe2f0> (a sun.net.www.protocol.http.HttpURLConnection)
        at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:373)
        at org.springframework.http.client.SimpleClientHttpResponse.getRawStatusCode(SimpleClientHttpResponse.java:47)
        at org.springframework.http.client.AbstractClientHttpResponse.getStatusCode(AbstractClientHttpResponse.java:32)
        at org.springframework.web.client.DefaultResponseErrorHandler.getHttpStatusCode(DefaultResponseErrorHandler.java:55)
        at org.springframework.web.client.DefaultResponseErrorHandler.hasError(DefaultResponseErrorHandler.java:49)
        at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:489)
        at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:452)
        at org.springframework.web.client.RestTemplate.postForObject(RestTemplate.java:302)
        at com.xxx.activation.service.action.impl.RestServiceImpl.sendContactRequest(RestServiceImpl.java:37)
        at com.xxx.activation.service.action.impl.SendContactRequestAction.perform(SendContactRequestAction.java:125)
        at com.xxx.activation.service.action.impl.DefaultStateActionService.doAction(DefaultStateActionService.java:75)
        at com.xxx.activation.service.action.impl.ActionProcess$StateActionTask.call(ActionProcess.java:54)
        at com.xxx.activation.service.action.impl.ActionProcess$StateActionTask.call(ActionProcess.java:41)
        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
        at java.util.concurrent.FutureTask.run(FutureTask.java:138)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
        at java.lang.Thread.run(Thread.java:619)
Run Code Online (Sandbox Code Playgroud)


我该如何解决这个问题? …

java spring spring-remoting resttemplate

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

Java显式构造函数调用和实例初始化程序

在Java教程 - 初始化字段中,有关于实例初始化块(实例初始化程序)的描述:

Java编译器将初始化程序块复制到每个构造函数中.因此,该方法可用于在多个构造函数之间共享代码块.

如果释义正确,则对于以下代码:

public class ConstructorTest {

    public static void main(String[] args) {
        Child c = new Child();
    }
}

class Parent {
    Parent() {
        System.out.println("Parent non-argument Constructor");
    }
}

class Child extends Parent {

    {
        System.out.println("Child Instance Initialization Block");
    }

    Child() {
        this(2);
        System.out.println("Child no-argument Constructor");

    }

    Child(int i) {
        this(10, i);
        System.out.println("Child 1-argument Constructor");
    }

    Child(int i, int j) {
        System.out.println("Child 2-argument Constructor");
    }
}
Run Code Online (Sandbox Code Playgroud)

输出应该是:

Parent non-parm Constructor
Child Instance Initialization Block
Child …
Run Code Online (Sandbox Code Playgroud)

java constructor this super invocation

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

使用Log4J2时,我应该编写SLF4J或Log4J2 API吗?

什么被认为是更好的做法?如果我编写SLF4J代码,是否可以获得所有Log4J2的好处?它会影响性能吗?以上所有问题对JCL也有同样的答案吗?

logging slf4j apache-commons-logging log4j2

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

Java 类加载器:定义加载器和启动加载器之间的区别?

JVMS

类加载器 L 可以通过直接定义 C 或委托给另一个类加载器来创建 C。如果 L 直接创建 C,我们说 L 定义了 C,或者等价地,L 是C的定义加载器

当一个类加载器委托给另一个类加载器时,发起加载的加载器不一定是完成加载并定义类的加载器。如果 L 通过直接定义或委托创建 C,我们说 L 启动 C 的加载,或者等价地,L 是C的启动加载器

我对这些有点困惑。

假设我们有两个类加载器:L 和 L p,并且 L p是L的父级。

如果C被在L和用L成功创建,则L是两个限定装载机启动加载器的C,是正确的吗?

如果 C 在 L 中定义但由 L p创建,我猜 L p正在启动C 的加载程序
但是 C 的定义 loader 是什么?因为 C 是在 L 中定义的,但不是由它直接创建的?这是个问题。

感谢所有回复。

java classloader

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