小编Sha*_*dov的帖子

枚举中的通用类字段

public enum Dictionaries {
    FIRST_DICTIONARY(FirstDictionary.class),
    SECOND_DICTIONARY(SecondDictionary.class);

    private Class<? extends DictionaryModel> clazz;

    private Dictionary(Class<? extends DictionaryModel> clazz) {
        this.clazz = clazz;
    }

    public Class<? extends DictionaryModel> clazz() {
        return this.clazz;
    }
}
Run Code Online (Sandbox Code Playgroud)

我有这个枚举。FirstDictionarySecondDictionary实现DictionaryModel,这是为了使用此解决方案的标记接口。

现在我很想这样做:

Class<FirstDictionary> clazz = Dictionaries.FIRST_DICTIONARY.clazz();

这种设计显然是不可能的,我想不出实现这一目标的方法。有没有办法做到这一点?我可以访问整个代码,因此我可以修改所有内容,包括界面(甚至删除它)。

我简化了所有这一切,重点是每个字典都是一个数据库表,我有一个通用的 DAO(而不是每个字典的 DAO),现在我必须转换我想避免的每次读取的结果。我知道通用 DAO 不是一个好主意(或者根本不是 DAO)。

Optional<DictionaryModel> entity = dao.getByValue(Dictionaries.FIRST_DICTIONARY, value);

即使对于任何动态转换,在 DAO 本身或clazz()方法中,我似乎也无法解决。我觉得我在这里遗漏了一些明显的东西。

我很欣赏任何想法,甚至完全改变设计。

java generics java-8

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

Log4j + Hibernate 5 + Weblogic 12.2.1

我使用的是Hibernate 5.2.10.Final,log4j 1.2.17(从此处开始),Weblogic 12.2.1。这是我的log4j.xml样子:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration PUBLIC
  "-//APACHE//DTD LOG4J 1.2//EN" "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

    <appender name="console" class="org.apache.log4j.ConsoleAppender">
        <param name="Target" value="System.out" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="[%5p] %d{yyyy-MM-dd HH:mm:ss} [%x] [%C.%M] - %m %n" />
        </layout>
    </appender>

    <appender name="logFile" class="org.apache.log4j.RollingFileAppender">
        <param name="File" value="../logs/mylog.log"/>
        <param name="MaxFileSize" value="100MB"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern"
                value="[%5p] %d{yyyy-MM-dd HH:mm:ss} - %m %n" />
        </layout>
    </appender>

    <logger name="interceptorLog" additivity="false">
        <level value="INFO" />
        <appender-ref ref="logFile" />
    </logger>

    <root>
        <priority value="ALL" />
        <appender-ref ref="logFile"/> …
Run Code Online (Sandbox Code Playgroud)

logging hibernate log4j weblogic12c log4j2

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

在Kotlin中getOrElseReturn的可能性

我经常有一个问题Optional和相似的类OptionTryEitherVAVR例如。

假设我有一些Optional,如果它为空,我想立即从一个方法中返回(无例外,因为我的方法Optional也在返回,所以getOrElseThrow不在图片之列),如果存在,我想进一步处理它。

public Optional<Integer> converter() {
  Optional<String> opt = getSomething();

  if(!opt.isPresent())
    return Optional.empty();

  String value = opt.get();  
  // some manipulations on value, such as map and flatMap would cause a huge mess
  return Integer.parseInt(value);  
}
Run Code Online (Sandbox Code Playgroud)

我只需要在值为空的情况下立即返回,就不能建立mapand的链flatMap。整个痛苦都在做.get()。有点像getOrElseThrow,但是用return代替throw会很棒- getOrElseReturn。显然在Java中是不可能的,因此我考虑在Kotlin中尝试此操作。

fun safeOptional(): Optional<Int> {
    val extracted = Optional.of("123")
            .getOrElseReturn { return Optional.empty() }

    val …
Run Code Online (Sandbox Code Playgroud)

java lambda java-8 kotlin

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

标签 统计

java ×2

java-8 ×2

generics ×1

hibernate ×1

kotlin ×1

lambda ×1

log4j ×1

log4j2 ×1

logging ×1

weblogic12c ×1