小编Ber*_*ard的帖子

泛型有"私有访问"错误

我有一个问题,我实际上可以解决自己,但我仍然不明白为什么我的原始代码不起作用,或者是否有一个比我找到的更优雅的解决方案.我在这里展示了我的代码的简化版本.

考虑以下抽象超类X:

public abstract class X{

  private int i;

  public void m1(X x){
    x.i = 1; 
    m2(x);
  }

  public abstract void m2(X x);

}
Run Code Online (Sandbox Code Playgroud)

当调用m1时,我们操作传递的实例的X的私有字段,然后我们用该实例调用m2.

我有几个X的子类,它们都是相似的,因为它们也声明了它们操纵的私有成员.为了达到这个目的,他们总是需要在m2开始时进行演员表演.这是其中之一:

public class Y extends X{

  private int j;

  public void m2(X x){
     Y y = (Y) x;
     y.j = 0;
  }

}
Run Code Online (Sandbox Code Playgroud)

但是 - 我可以保证每个X子类实例的m1调用总是有一个相同类型的参数,例如当我有一个Y的实例时,方法m1的参数将始终是另一个实例Y.

由于这种保证,我想通过引入泛型来使演员不必要.这就是我希望我的子类看起来像这样的样子:

public class Y extends X<Y>{

  private int j;

  public void m2(Y y){
     y.j = 0;
  }

}
Run Code Online (Sandbox Code Playgroud)

超类X现在看起来怎么样?我的第一次尝试是:

public abstract class X<T extends X<T>>{

  private int i;

  public …
Run Code Online (Sandbox Code Playgroud)

java generics inheritance

11
推荐指数
1
解决办法
8733
查看次数

从mysqldump创建的SQL恢复后,ERROR 1465"无法在系统表上创建触发器"

我正在亚马逊RDS上运行一个mysql 5.6服务器并设置一个我用来使用mysqldump创建备份的只读副本.

我尝试使用"--all-databases"选项,但是当我尝试导入mysqldump创建的SQL时,我最终得到了mysql命令客户端的错误:

ERROR 1465 "Triggers can not be created on system tables"
Run Code Online (Sandbox Code Playgroud)

我使用了"--all-databases",因为我基本上想要恢复RDS中的所有内容,就像以前发生崩溃一样.

也许这是错的,我应该只选择我的模式(加上mysql.users表)?但是什么是"--all-databases"首先,如果它永远不会工作?或者我使用它错了?

mysql mysqldump rds

4
推荐指数
2
解决办法
3039
查看次数

如何在模块/集成测试中禁用 Spring SQS 处理程序

我有一个 Spring Boot 应用程序,它只不过是通过具有 @SqsListener 注释方法的组件“MessageHandler”侦听 SQS 队列,并在消息到达时开始一些工作。

还有一个 boot-starter-web 依赖项,因为我们希望在生产中通过 http 获取健康状态和指标。

现在我想编写一个模块测试,它已经有一个应用程序上下文和自动装配 bean。我还发现了如何禁用测试不需要的 Web 服务器:

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = NONE)
Run Code Online (Sandbox Code Playgroud)

但是,MessageHandler bean 也会被实例化并尝试连接到 AWS,我想阻止这种情况。

一种有效的解决方案是在 src/test/java 中使用 @Primary 注释进行测试实现,其 handleMessage 方法没有 @SqsListener 注释:

@Component
@Primary
public class TestMessageHandler implements MessageHandler {

    @Override
    public void handleMessage(final NewMessage newMessage) throws Exception {
        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

但是现在我还想测试(真实的)MessageHandler bean,这意味着我希望 Spring 实例化它并自动装配它的依赖项,但我仍然不希望 @SqsListener 注释变为活动状态,因此我可以调用在我的测试中是这样的:

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = NONE)
public class IntegrationTest {

    @Autowired
    private RealMessageHandler messageHandler;


    @Test
    public void testHandleMessage() throws Exception { …
Run Code Online (Sandbox Code Playgroud)

spring-cloud-aws spring-boot-test

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