我在计算当月的下一个最后一天是否为计划发送的通知时遇到问题.
这是我的代码:
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)
如何使用日历正确设置通知的下个月的最后一天?
我有一个基本的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上有更多学分的图书馆是CP30和DBCP.由于我使用的是Oracle,我还可以使用驱动程序提供的池数据源.我知道有更多的库可用 - 例如新的Apache Tomcat 7池库.
有没有我应该避免的图书馆?
我应该在给定的库中使用任何推荐的配置吗?
你想分享的任何"战争故事"?
来自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) 我已将此主题应用于WebStorm,但我不喜欢它.
如何恢复到WebStorm的默认设置?
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)
我有几个问题出现:
任何人都可以建议Java允许这些冗余类型参数的正当理由吗?接受他们没有伤害,我似乎仍然喜欢编译器能够而且应该抓住的东西.
如果使用类型参数调用方法前缀为"this",则该代码仅编译.否则你会得到"非法开始表达"错误.那是一个错误吗?不应该使用任何明确的方法调用"this".也没有"这个"工作?
(对这些问题的催化剂是甲骨文的反应,以我一个有趣的Java问题,有人提出了创建错误报告这里的SO).
更新2015年9月18日
这不是问题 ; 使用与普通方法相同的规则检查方法引用 - 请注意,对于普通方法,您始终可以提供冗余类型参数:
void m() { }
this.<String>m(); //legal
Run Code Online (Sandbox Code Playgroud)
方法(和构造函数)引用简单地继承此行为,如15.13所示:""如果方法引用表达式具有ReferenceType …
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",但对我来说它只是打印“?” - 一个问号。
\nchar letter = \'\\u1699\';\nSystem.out.println(letter);\n
Run Code Online (Sandbox Code Playgroud)\n我尝试了 Stack Overflow 上的几乎所有解决方案,例如:
\n这些都不起作用。
\n每一个帖子都是很多年前的,比如这个,是12年前的:
\nunicode 字符在 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 …
在“工具”>“选项”>“C/C++”>“其他”中,没有将 C++17 作为默认标准的选项。
你如何编译需要 C++17 的代码?
我正在使用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) 我已升级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) 我正在使用Windows 10并运行Oracle昨天发布的Java 9版本.
如果我打开一个jshell并输入System.out.println(System.getenv()),输出就像预期的那样,如下面屏幕截图的下半部分所示.
但是,如果我只是输入System.getenv(),则输出中间会丢失大量数据.请参阅下面屏幕截图的初始部分.这似乎是jshell的一个特性,因为在System.getenv()输出中的省略号(" ... ")下面的屏幕截图中(在第二个框中用手绘黄色边缘)完全对应于缺失的数据.
缺少环境变量CommonProgramFiles的结束部分,环境变量SPRING_HOME的开头也是如此,并且还有其他几个环境变量,例如Path,根本没有显示.
(屏幕截图中的某些信息因隐私而模糊不清.)
有没有其他人看到同样的事情(或没有),有没有人有关于为什么jshell这样做的建议?