相关疑难解决方法(0)

为什么this()和super()必须是构造函数中的第一个语句?

Java要求如果在构造函数中调用this()或super(),它必须是第一个语句.为什么?

例如:

public class MyClass {
    public MyClass(int x) {}
}

public class MySubClass extends MyClass {
    public MySubClass(int a, int b) {
        int c = a + b;
        super(c);  // COMPILE ERROR
    }
}
Run Code Online (Sandbox Code Playgroud)

Sun编译器说"调用super必须是构造函数中的第一个语句".Eclipse编译器说"构造函数调用必须是构造函数中的第一个语句".

但是,您可以通过重新安排代码来解决这个问题:

public class MySubClass extends MyClass {
    public MySubClass(int a, int b) {
        super(a + b);  // OK
    }
}
Run Code Online (Sandbox Code Playgroud)

这是另一个例子:

public class MyClass {
    public MyClass(List list) {}
}

public class MySubClassA extends MyClass {
    public MySubClassA(Object item) {
        // Create a list …
Run Code Online (Sandbox Code Playgroud)

java constructor

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

空 Feign 配置未扩展

我有几个 Feign 客户端,具有不同的配置。常见的配置如下所示

public class FeignLogConfig {
    @Bean
    public LogOkHttpInterceptor LogOkHttpInterceptor() { //custom interceptor
        return new LogOkHttpInterceptor(); 
    }

    @Bean
    public feign.okhttp.OkHttpClient okHttpClient(LogOkHttpInterceptor interceptor) {
        OkHttpClient.Builder builder = new OkHttpClient.Builder();
        builder.addInterceptor(interceptor);
        return new feign.okhttp.OkHttpClient(builder.build());
    }
}
Run Code Online (Sandbox Code Playgroud)

可以进一步扩展

public class FeignRetryerConfig extends FeignLogConfig {
    @Bean
    public Retryer retryer() {
        return new Retryer.Default(100, 500, 5);
    }
}
Run Code Online (Sandbox Code Playgroud)

或者简单地

public class FeignEmptyConfig extends FeignLogConfig {}
Run Code Online (Sandbox Code Playgroud)

客户端注释为

@FeignClient(value = "retryClient", url = url, configuration = FeignRetryerConfig.class)
Run Code Online (Sandbox Code Playgroud)

或者

@FeignClient(value = "logClient", url = url, configuration = …
Run Code Online (Sandbox Code Playgroud)

java spring-boot spring-cloud-feign

7
推荐指数
0
解决办法
314
查看次数

Java测试(初学者)

我在java书中看到了这个带有测试的程序,我无法理解,为什么这是正确的答案:

该计划的输出是什么?

class Base
{ 
    Base()
    {
        System.out.print("Base");
    }
} 
public class Alpha extends Base
{ 
    public static void main(String[] args)
    { 
        new Alpha(); /* Line 12 */
        new Base(); /* Line 13 */
    } 
}
Run Code Online (Sandbox Code Playgroud)

所有答案:

  • A.Base
  • B.BaseBase
  • C.编译失败
  • D.代码运行时没有输出

正确的答案是BaseBase.

java

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