小编sko*_*isa的帖子

计算的最后一天

我在计算当月的下一个最后一天是否为计划发送的通知时遇到问题.

这是我的代码:

RecurrenceFrequency recurrenceFrequency = notification.getRecurrenceFrequency();
Calendar nextNotifTime = Calendar.getInstance();
Run Code Online (Sandbox Code Playgroud)

这是引起我相信问题的界限:

nextNotifTime.add(recurrenceFrequency.getRecurrencePeriod(), 
                  recurrenceFrequency.getRecurrenceOffset());
Run Code Online (Sandbox Code Playgroud)

如何使用日历正确设置通知的下个月的最后一天?

java datetime calendar

133
推荐指数
7
解决办法
17万
查看次数

Spring JDBC连接池的最佳实践

我有一个基本的Spring JDBC应用程序,它具有非常基本的配置:

<bean id="myDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
   <property name="driverClassName" value="oracle.jdbc.OracleDriver"/>
   <property name="url" value="jdbc:oracle:thin:@1.1.1.1:1521:XXX"/>
   <property name="username" value="username"/>
   <property name="password" value="password"/>
</bean>

<bean id="dbThing" class="com.DbThing">
   <property name="dataSource" ref="myDataSource"/>
</bean>
Run Code Online (Sandbox Code Playgroud)

我想介绍一个连接池,并在阅读了几个线程后,我对使用哪个池库感到有点困惑.

似乎在SO上有更多学分的图书馆是CP30DBCP.由于我使用的是Oracle,我还可以使用驱动程序提供的池数据源.我知道有更多的库可用 - 例如新的Apache Tomcat 7池库.

有没有我应该避免的图书馆?

我应该在给定的库中使用任何推荐的配置吗?

你想分享的任何"战争故事"?

java spring connection-pooling c3p0 apache-commons-dbcp

38
推荐指数
4
解决办法
8万
查看次数

Java中的"解除引用"是否有正式或权威的定义?

来自C和C++背景,我一直认为Java中的解除引用是通过其引用访问对象的过程.

例如,"ref"是一个引用,当用于访问它引用的Integer对象时,它将被解引用:

    Integer ref = new Integer(7);     
    // Dereference "ref" to access the object it refers to.
    System.out.println(ref.toString()); 
Run Code Online (Sandbox Code Playgroud)

当解除引用过程失败时,会发生NullPointerExceptions:

Integer ref = null;
// Dereferencing "ref" causes an exception.
System.out.println(ref.toString()); 
Run Code Online (Sandbox Code Playgroud)

但是,我的解释与Oracle新的Java SE 8 Programmer I考试(测试版)上测试的主题之一相冲突:

解释对象的生命周期(创建," 通过重新分配取消引用 "和垃圾收集)

因此,根据创建Java 8考试的人,在Java中取消引用是重新分配引用的行为,而不是评估引用的行为:

例如:

    // Create an Integer object, and a reference to it.
    Integer ref = new Integer(7); 
    ref = null; 
    // Now (according to Oracle?):
    // - The reassignment means ref has been "dereferenced".
    // …
Run Code Online (Sandbox Code Playgroud)

java

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

WebStorm.重置默认设置

我已将此主题应用于WebStorm,但我不喜欢它.

如何恢复到WebStorm的默认设置?

user-preferences webstorm

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

与Java方法调用中的类型参数相关的问题

Java 8 Java语言规范提供了一个带有类型参数的方法调用示例,如"例4.11-1.类型的用法":

<S> void loop(S s) {
    this.<S>loop(s); // <S> is the the type argument for the method call.
}
Run Code Online (Sandbox Code Playgroud)

在该示例中,提供的类型参数是有意义的,但显然方法调用的类型参数也可能是多余的并且完全没有意义,甚至不需要涉及泛型.例如:

void m() { }

void test() {
    m(); 
    this.m(); 
    this.<Integer>m(); // Compiles and runs OK!
    this.<String, Byte, StringBuilder, Thread[], Throwable>m(); // Compiles and runs OK!
    <Integer>m(); // Won't compile: "illegal start of expression"
}
Run Code Online (Sandbox Code Playgroud)

我有几个问题出现:

  1. 任何人都可以建议Java允许这些冗余类型参数的正当理由吗?接受他们没有伤害,我似乎仍然喜欢编译器能够而且应该抓住的东西.

  2. 如果使用类型参数调用方法前缀为"this",则该代码仅编译.否则你会得到"非法开始表达"错误.那是一个错误吗?不应该使用任何明确的方法调用"this".也没有"这个"工作?

(对这些问题的催化剂是甲骨文的反应,以我一个有趣的Java问题,有人提出了创建错误报告这里的SO).

更新2015年9月18日

  1. 我在Oracle上针对这个问题提出了错误JDK-8098556.以下是他们的回复:

这不是问题 ; 使用与普通方法相同的规则检查方法引用 - 请注意,对于普通方法,您始终可以提供冗余类型参数:

void m() { }
this.<String>m(); //legal
Run Code Online (Sandbox Code Playgroud)

方法(和构造函数)引用简单地继承此行为,如15.13所示:""如果方法引用表达式具有ReferenceType …

java java-8

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

IntelliJ 中的 Java JDK 18 打印问号“?” 当我尝试打印像“\u1699”这样的unicode时

tldr:我降级到 JDK 17 (17.0.2),现在它可以工作了......

\n

我在 YT 上观看 Kody Simpson 的 Java 初学者教程 (youtube.com/watch?v=t9LP9Nt9Nco),在该教程中,男孩 Kody 打印了名为 Unicode 的疯狂符号,例如“\xe2\x98\xaf\xce\xa9\xc3” \xb8\xe1\x9a\x99",但对我来说它只是打印“?” - 一个问号。

\n
char letter = \'\\u1699\';\nSystem.out.println(letter);\n
Run Code Online (Sandbox Code Playgroud)\n

我尝试了 Stack Overflow 上的几乎所有解决方案,例如:

\n
    \n
  • 将文件编码更改为 UTF-8,尽管我的默认使用 UTF-8。
  • \n
  • 将“-Dconsole.encoding=UTF-8”和“-Dfile.encoding=UTF-8”放入“编辑自定义虚拟机”选项中。
  • \n
  • 弄乱控制面板中的区域设置。
  • \n
\n

这些都不起作用。

\n

每一个帖子都是很多年前的,比如这个,是12年前的:

\n

unicode 字符在 IntelliJ IDEA 控制台中显示为问号

\n

我最终删除并重新下载了 Intellij,因为我认为我弄乱了一些设置并想要重新启动,但这次我将 Project SDK 设置为旧版本,Oracle openJDK 版本 14.0.1,现在它以某种方式工作并打印了 \ '\xe1\x9a\x99\' 符号。

\n

然后我意识到问题可能是 JDK 的最新版本,即版本 18,所以我下载了 JDK 17.0.2,它仍然可以工作并打印出符号 \'\xe1\x9a\x99\',所以那就是好的 :)。但是当我切换回 JDK 版本 18 时,它只打印“?” 再次。

\n

这也很奇怪,因为我可以将 \xe1\x9a\x99 …

java unicode intellij-idea java-18

10
推荐指数
2
解决办法
2910
查看次数

如何在 Netbeans 中启用 C++17?

在“工具”>“选项”>“C/C++”>“其他”中,没有将 C++17 作为默认标准的选项。

你如何编译需要 C++17 的代码?

c++ netbeans netbeans-8 c++17 netbeans-11

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

通过Dagger 2提供RoomDatabase时,实现.addCallback()的正确方法是什么?

我正在使用Dagger 2在我的应用程序中创建和共享我的RoomDatabase.

我正在尝试实现addCallback(),因此我可以覆盖数据库的onCreate函数并使用它来插入我的初始数据库值.这是我遇到问题的地方.

我觉得我必须忽略一些显而易见的事情,但我无法找到一种方法来优雅地做到这一点.

RoomDatabase类:

@Database(
        entities = [Station::class],
        version = 1,
        exportSchema = false
)
abstract class TrainDB : RoomDatabase() {

    abstract fun stationDao() : StationDao

} 
Run Code Online (Sandbox Code Playgroud)

DAO:

@Dao
abstract class StationDao {

    @Insert(onConflict = OnConflictStrategy.REPLACE)
    abstract fun insert(stations: Station)

    @Query("SELECT * FROM station_table")
    abstract fun getAll() : LiveData<List<Station>>

}
Run Code Online (Sandbox Code Playgroud)

匕首模块:

@Module
class DataModule {

    @Singleton
    @Provides
    fun provideDb(app: Application): TrainDB {
        var trainDB: TrainDB? = null
        trainDB = Room
                .databaseBuilder(app, TrainDB::class.java, "train.db")
                .allowMainThreadQueries()
                .fallbackToDestructiveMigration()
                .addCallback(object : RoomDatabase.Callback() { …
Run Code Online (Sandbox Code Playgroud)

android kotlin dagger-2 android-room

8
推荐指数
2
解决办法
2391
查看次数

如何使用JDK 11为Collection.toArray()提供生成器函数?

我已升级Eclipse Photon 4.8(http://download.eclipse.org/eclipse/downloads/drops4/S-4.9M2-201808012000/)以支持JDK 11(https://marketplace.eclipse.org/content/java- 11-support-eclipse-photon-49).它似乎工作正常(版本:4.9 Build id:I20180801-2000).

在JDK 11 toArray()中,Java.util.Collection中有一个新的方法重写:

default <T> T[] toArray(IntFunction<T[]> generator) {
    return toArray(generator.apply(0));
}
Run Code Online (Sandbox Code Playgroud)

这是一种默认方法,但不会覆盖它.它所做的只是将提供的生成器函数返回的值(使用硬编码的零参数)传递给另一个覆盖toArray(),然后将其作为数组返回Collection的内容.

如该方法的Javadoc中所述,它可以像这样调用:

String[] y = x.toArray(String[]::new);
Run Code Online (Sandbox Code Playgroud)

这工作正常,并返回一个相应长度的适当长度的String数组Collection<String>.

Javadoc还声明" 默认实现调用生成器函数为零,然后将结果数组传递给toArray(T []) ".

如果我提供自己的生成器函数,它会被调用(如println()控制台输出所示),但其apply()方法的返回值似乎被忽略.toArray(String[]::new)无论我的生成器函数返回的数组内容如何,都好像我已经调用过一样.

这是MCVE:

package pkg;

import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.function.IntFunction;

public class App {
    public static void main(String[] args) {

        IntFunction<String[]> intFunc = (int sz) -> {
            System.out.println("intFunc: sz: " + sz);
            if …
Run Code Online (Sandbox Code Playgroud)

java eclipse-photon java-11

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

在Java 9上,为什么System.getenv()的输出在jshell中不完整?

我正在使用Windows 10并运行Oracle昨天发布的Java 9版本.

如果我打开一个jshell并输入System.out.println(System.getenv()),输出就像预期的那样,如下面屏幕截图的下半部分所示.

但是,如果我只是输入System.getenv(),则输出中间会丢失大量数据.请参阅下面屏幕截图的初始部分.这似乎是jshell的一个特性,因为在System.getenv()输出中的省略号(" ... ")下面的屏幕截图中(在第二个框中用手绘黄色边缘)完全对应于缺失的数据.

缺少环境变量CommonProgramFiles的结束部分,环境变量SPRING_HOME的开头也是如此,并且还有其他几个环境变量,例如Path,根本没有显示.

在此输入图像描述

(屏幕截图中的某些信息因隐私而模糊不清.)

有没有其他人看到同样的事情(或没有),有没有人有关于为什么jshell这样做的建议?

read-eval-print-loop java-9 jshell

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