小编Sim*_*mY4的帖子

具有多个接口的Java通用对象

假设我有一个我使用的泛型类,声明如下:

public class ConfigurableRuleKey<R extends Configurable & Rule> extends Key<R> {

    private final R rule

    public ConfigurableRuleKey(R rule) {
        this.rule = rule;
    }

    /* Additional methods are declared here */

}
Run Code Online (Sandbox Code Playgroud)

我想实现一个工厂方法,检查传递规则是否实现接口Configurable,创建可配置规则或只创建一个基本密钥:

public static <R extends Rule> Key<R> create(R rule) {
    if (rule instanceof Configurable) {
        return new ConfigurableRuleKey<>(rule); //This will not compile
    } else {
        return new RuleKey<>(rule);
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是在我的工厂方法中我不能将规则传递给构造函数,ConfigurableRuleKey因为它不符合声明的泛型约束(如果我明确检查它实现的话,则为事件Configurable).问题是如何构建我的规则实例以使其符合构造函数限制ConfigurableRuleKey

java generics

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

如何暂时禁用Spring缓存的缓存

我有一个带有@Cacheable注释定义的spring bean注释

@Service
public class MyCacheableBeanImpl implements MyCacheableBean {
    @Override
    @Cacheable(value = "cachedData")
    public List<Data> getData() { ... }
}
Run Code Online (Sandbox Code Playgroud)

我需要这个类能够禁用缓存并仅使用来自原始源的数据.这应该基于来自外部的一些事件发生.这是我的方法:

@Service
public class MyCacheableBeanImpl implements MyCacheableBean, ApplicationListener<CacheSwitchEvent> {
    //Field with public getter to use it in Cacheable condition expression
    private boolean cacheEnabled = true;

    @Override
    @Cacheable(value = "cachedData", condition = "#root.target.cacheEnabled") //exression to check whether we want to use cache or not
    public List<Data> getData() { ... }

    @Override
    public void onApplicationEvent(CacheSwitchEvent event) {
        // Updating field …
Run Code Online (Sandbox Code Playgroud)

java spring caching ehcache

8
推荐指数
1
解决办法
4293
查看次数

使用Guice + Kotlin绑定对象列表

我正在使用以下控制器定义在Kotlin中编写JavaFX应用程序:

class MainController {

    @Inject private lateinit var componentDescriptors: List<ComponentDescriptor>
    /* More code goes here */

}
Run Code Online (Sandbox Code Playgroud)

我正在使用Guice进行依赖管理.我正在尝试注入通过加载的类实例列表java.util.ServiceLoader.我的问题是定义一个绑定,它将加载的对象实例列表注入声明的字段.我尝试了基于注释的配置:

internal class MyModule: AbstractModule() {

    override fun configure() { }

    @Provides @Singleton
    fun bindComponentDescriptors(): List<ComponentDescriptor> = 
            ServiceLoader.load(ComponentDescriptor::class.java).toList()

}
Run Code Online (Sandbox Code Playgroud)

和multibinding扩展(在corse的字段定义中切换List to Set):

internal class MyModule: AbstractModule() {

    override fun configure() {
        val componentDescriptorBinder = Multibinder.newSetBinder(binder(), ComponentDescriptor::class.java)
        ServiceLoader.load(ComponentDescriptor::class.java).forEach {
            componentDescriptorBinder.addBinding().toInstance(it)
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

但这两种方法都会导致同样的错误:

No implementation for java.util.List<? extends simpleApp.ComponentDescriptor> was bound.
  while locating java.util.List<? extends simpleApp.ComponentDescriptor>
    for field at simpleApp.MainController.componentDescryptors(MainController.kt:6)
  while …
Run Code Online (Sandbox Code Playgroud)

dependency-injection guice kotlin

8
推荐指数
1
解决办法
1831
查看次数

Mac上的logback返回问号而不是单词

我刚刚开始使用logback来记录在glassfish3 AS上运行的Java项目,我注意到了一些奇怪的事情.这段代码

LOG.error("?????????? {} ??? ???????????.", calc);
Run Code Online (Sandbox Code Playgroud)

如果我在Windows上运行我的应用程序,则生成正常的预期输出.但如果我在Mac上的配置相同,我会有问号而不是文字,如下所示:

15:37:29.083 ERROR r.g.g.c.TotalNachController - ?????????? [id=8871] ??? ???????????.
Run Code Online (Sandbox Code Playgroud)

我的logback配置是:

<appender name="FILE" class="ch.qos.logback.core.FileAppender">
    <file>../logs/logback.log</file>
    <encoder>
        <pattern>%d{HH:mm:ss.SSS} %-5level %logger{35} - %msg%n</pattern>
    </encoder>
</appender>
Run Code Online (Sandbox Code Playgroud)

有人可以告诉我,我做错了什么?

java macos logging glassfish logback

7
推荐指数
1
解决办法
2357
查看次数

Spring Data Mongodb - 用于收集不同类型的存储库

我有一个mongo集合,可能包含三种类型的实体,我映射到java类型:

  • 节点
  • LeafType1
  • LeafType2

集合是使用父条目中的子节点的dbRefs来存储树状结构.

我没有在Spring参考文档中找到任何有关主题的信息,所以我在这里问:有没有办法使用Repository机制来处理可能包含不同类型对象的集合?

在一个集合中为不同类型声明几个存储库似乎不是一个好主意,因为当查询对象不是预期类型并且为抽象类创建一个所有可能类型继承似乎不起作用的存储库时,我总是很难处理.

说明我的意思:

/**
 * This seems not safe
 */
public interface NodeRepository extends MongoRepository<Node, String> { }
public interface LeafType1Repository extends MongoRepository<LeafType1, String> { }
public interface LeafType2Repository extends MongoRepository<LeafType2, String> { }

/**
 * This doesn't work at all
 */
public interface MyCollectionRepository extends MongoRepository<AbstractMyCollectionNode, String> { }
Run Code Online (Sandbox Code Playgroud)

java spring mongodb spring-data spring-data-mongodb

7
推荐指数
1
解决办法
8303
查看次数

如何处理胖jar依赖

我有一个我在项目中使用的专有依赖项,我无法拒绝.它建在一个大胖子罐子里,里面收集了所有依赖的包裹.我的意思是甚至像slf4j-api,apache-commons,javax包等常见的那些.

将它与我自己的声明的dependecies列表一起使用是有风险的,因为在类加载器中总是会首先加载一个类 - 在fat jar中我的或者过时的类.

我想知道有没有解决这个问题的方法?如何治疗这种肥胖的罐子?我正在使用maven进行依赖管理.

java dependency-management maven

7
推荐指数
1
解决办法
3316
查看次数

猫中的异步可以并行吗?

Parallel我注意到,即使在最强大的 typeclass 中,cats-effect 类型类层次结构也不会从 cats 核心继承ConcurrentEffect。仅当直接使用 IO 时,才存在为并行提供的唯一实例。

但不应该有一个吗?我有点觉得Sync[F]并且Async[F]应该是一个很好的二人组Parallel[F]

scala scala-cats

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