在查看此问题时,我注意到应用于@Throwsaget或setuse-site 无效。
此外,唯一有效的目标为@Throws是AnnotationTarget.FUNCTION,AnnotationTarget.PROPERTY_GETTER,AnnotationTarget.PROPERTY_SETTER,和AnnotationTarget.CONSTRUCTOR。
其他注释,例如 JPA 注释和Deprecated工作正常,并正确应用于该方法!
这是奇怪的行为。
为了演示,我在 Java 中创建了一个简单的抽象类,具有一个构造函数、一个方法和一个 get 方法。
public abstract class JavaAbstractClass {
@Deprecated
@NotNull public abstract String getString() throws IOException;
public abstract void setString(@NotNull String string) throws IOException;
public abstract void throwsFunction() throws IOException;
public JavaAbstractClass() throws IOException {
}
}
Run Code Online (Sandbox Code Playgroud)
如您所见,每个方法/构造函数都标记为 throwing IOException。
然而,当我尝试在 Kotlin 中编写一个等效的类,并用throwsfor interop标记适当的方法时,生成的getString和 …
我试图使用Hibernate将项目"升级"到Java 9,但是我在使模块正常运行时遇到了问题.
我的相关部分module-info.java看起来像这样:
module test {
...
requires java.base;
requires hibernate.core;
requires javax.transaction;
requires java.sql;
}
Run Code Online (Sandbox Code Playgroud)
以及我POM中的相关依赖项
org.jboss.spec.javax.transaction:jboss-transaction-api_1.2_spec,2.0.0.Alpha1org.hibernate:hibernate-core,5.2.12.最终javax.transaction:javax.transaction-api,1.2问题是,如果我运行该程序,我得到NoClassDefFoundError了javax.transaction.SystemException.我看着这一点,很明显,我的模块缺少requires的javax.transaction.
所以我添加了一个模块依赖javax.transaction-api.然后我继续尝试再次运行程序 - 现在我不见了java.sql.SQLException.
以下是我遇到的问题:如果我在java.sql包含此类的模块上添加依赖项,我最终会发生冲突:
模块读取包
javax.transaction.xa从两个java.sql和javax.transaction.api
java.sql并javax.transaction.api包含不同的包,并且有一个共同(javax.transaction.xa),但我需要所有包.
我该如何处理?我有什么简单的遗失吗?
在JavaScript/Python等动态语言中,可以在运行时覆盖或"修改"函数.例如,为了修改alertJS中的函数,可以这样做:
const _prev_alert = window.alert;
window.alert = function() {
_prev_alert.apply(this, arguments);
console.log("Alert function was called!");
}
Run Code Online (Sandbox Code Playgroud)
这将输出"调用警报功能!" 每次alert调用函数时都到控制台.
现在,显然这样的事情在Kotlin-JVM或Kotlin-Native的运行时期间是不可能的,因为它们具有静态特性.但是,对于那些相同的语言,是否有可能在编译期间修改未编译的函数?我不是指来自库的预编译函数,而是我在我正在开发的同一个项目中编写的函数.
例如,假设我有一个我写的函数get_number.我可以修改get_number为返回一个不同的数字而不改变它在main中的调用方式而不直接修改它的代码吗?(或者有一种方法我可以写原件,get_number所以修改可能在线下吗?)
fun main(args: Array<String>) {
println(get_number())
}
fun get_number(): Int {
return 3
}
// Without modifying the code above, can I get main to print something besides 3?
Run Code Online (Sandbox Code Playgroud)
我一直在阅读Kotlin的Annotations and Reflections元编程,所以也许那些可以控制编译器的行为并覆盖get_number代码?或者这是完全的疯狂,这种性质的唯一方法是通过在Kotlin上开发我自己的,独立的元编程包装器?
此外,只是为了澄清,这个问题不是关于Kotlin-JS,答案(如果存在)应该适用于Kotlin-JVM或Native.
令人惊讶的是(对我来说),这段代码没有做我想要的:
fun ByteArray.toHexString() : String {
return this.joinToString("") { it.toString(16) }
}
Run Code Online (Sandbox Code Playgroud)
结果Byte是有符号的,所以你得到单个字节的负十六进制表示,这导致完全虚假的最终结果.
此外,Byte.toString不会填充您想要的前导零.
什么是最简单的(没有额外的库,理想情况下没有扩展名).最有效的修复?
我使用has_secure_password来验证我的用户密码及其确认.我遇到的问题是,当有任何错误时,字段不会被field_with_errors div包裹.我知道我可以添加
validates_presence_of :password, :on => :create
validates_presence_of :password_confirmation, :on => :create
Run Code Online (Sandbox Code Playgroud)
但是这会产生以下错误消息:
密码摘要不能为空.
密码不能为空.
密码确认不能为空
我想要么使has_secure_password包裹有错误的字段有field_with_errors股利或删除"密码摘要不能为空." 一共错误.
谢谢.
我不知道我面临的问题是否仅针对我的情况,所以我写了一个精简版,说明了导致我的问题的原因(以JLabels 作为示例组件)。
public class InterestingBehavior {
static int direction = -4;
static final boolean useScroll = true;
static final String longString = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
public static void main(String[] args) {
JFrame test = new JFrame("Test");
test.setSize(500, 300);
test.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
test.setLayout(new BoxLayout(test.getContentPane(), BoxLayout.Y_AXIS));
for (int i = 0; i < 10; i++)
test.add(useScroll ? new JScrollPane(new JLabel(longString)) : new JLabel(longString));
test.add(Box.createVerticalGlue()); //should use all available space
final int min = 300, max = 600;
new Timer(50, e -> { …Run Code Online (Sandbox Code Playgroud) 我需要隐藏汉堡图标
这是我的工具栏
我需要隐藏导航栏的默认汉堡包图标,然后从另一个按钮click.The导航栏加载它需要在我的商工具栏上的附件点击图标出现,需要消失当我点击以外(任何地方).可以这样做吗?
这两者的主要区别是什么:
val array: Array<Double> = arrayOf()
Run Code Online (Sandbox Code Playgroud)
对比
val array: DoubleArray = doubleArrayOf()
Run Code Online (Sandbox Code Playgroud)
我知道一个是使用原始数据类型double,第二个是基于对象的 countrepart Double。
使用 plain 有什么惩罚或缺点DoubleArray吗?
为什么我想知道:
我正在使用 JNI 和 for Double,我必须打电话
jclass doubleClass = env->FindClass("java/lang/Double");
jmethodID doubleCtor = env->GetMethodID(doubleClass, "<init>", "(D)V");
jobjectArray res = env->NewObjectArray(elementCount, doubleClass, nullptr);
for (int i = 0; i < elementCount; i++){
jobject javaDouble = env->NewObject(doubleClass, doubleCtor, array[i]);
env->SetObjectArrayElement(res, i, javaDouble);
env->DeleteLocalRef(javaDouble);
}
Run Code Online (Sandbox Code Playgroud)
对比
jdoubleArray res = env->NewDoubleArray(elementCount);
env->SetDoubleArrayRegion(res, 0, elementCount, array);
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用此功能,但它给出的索引为 -1。那我能做什么
int[] veer = {14,25,14,56,15,36,56,77,18,29,49};
int a = Arrays.asList(veer).indexOf(14);
System.out.println("my array at position 14 is :" + (a));
Run Code Online (Sandbox Code Playgroud) 我有一个ApiService像这样命名的 Kotlin 单身人士:
object ApiService {
private val someApi:SomeApi = SomeApi.create()
fun getSomeApi():SomeApi{
return someApi
}
}
Run Code Online (Sandbox Code Playgroud)
现在我想ApiService.getSomeApi动态调用。我做了这样的事情:
val fullClassName = "com.somepackage.ApiService"
val obj = Class.forName(fullClassName)
obj.getMethod("getSomeApi").invoke(obj)
Run Code Online (Sandbox Code Playgroud)
但我得到了一个错误,如:
Expected receiver of type com.somepackage.ApiService, but got java.lang.Class <com.somepackage.ApiService>
Run Code Online (Sandbox Code Playgroud)
如果我硬编码.invoke(ApiService)它会正常工作,但是有没有办法动态地做到这一点?
我很难想出一个在 C# 中使用 LINQ 的简单解决方案来解决这个问题:
对于两个给定的数字 n 和 k,找出形式为 ±1 ± 2 ± 3 ± ... ± n = k 的所有可能组合。
例如,对于 n = 5 和 k = 3,结果将是
"-1+2+3+4-5 = 3", "-1+2+3+4-5 = 3"
public static void Main()
{
int firstNNumbers = Convert.ToInt32(Console.ReadLine());
int numberOfOperations = firstNNumbers - 1;
int targetSum = Convert.ToInt32(Console.ReadLine());
char[] set = { '+', '-' };
bool hasSolution = false;
GetAllOperatorCombinations(set, numberOfOperations, targetSum, ref hasSolution);
if (hasSolution)
{
return;
}
Console.WriteLine("N/A");
}
public static int …Run Code Online (Sandbox Code Playgroud) 在许多语言中,多行字符串文字语法是
"""
Hello
World
"""
Run Code Online (Sandbox Code Playgroud)
但为什么它需要一个新的语法,为什么不使用"而不是"""?
喜欢:
"Hello
World"
Run Code Online (Sandbox Code Playgroud)