小编Moi*_*ira的帖子

当目标是一个属性时@Throws 无效

在查看此问题时,我注意到应用于@Throwsagetsetuse-site 无效。

此外,唯一有效的目标@ThrowsAnnotationTarget.FUNCTIONAnnotationTarget.PROPERTY_GETTERAnnotationTarget.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和 …

java jvm annotations throws kotlin

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

Java 9,Hibernate和java.sql/javax.transaction

我试图使用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.Alpha1
  • org.hibernate:hibernate-core,5.2.12.最终
  • javax.transaction:javax.transaction-api,1.2

问题是,如果我运行该程序,我得到NoClassDefFoundErrorjavax.transaction.SystemException.我看着这一点,很明显,我的模块缺少requiresjavax.transaction.

所以我添加了一个模块依赖javax.transaction-api.然后我继续尝试再次运行程序 - 现在我不见了java.sql.SQLException.

以下是我遇到的问题:如果我java.sql包含此类的模块上添加依赖项,我最终会发生冲突:

模块读取包javax.transaction.xa从两个java.sqljavax.transaction.api

java.sqljavax.transaction.api包含不同的包,并且有一个共同(javax.transaction.xa),但我需要所有包.

我该如何处理?我有什么简单的遗失吗?

java hibernate jdbc maven java-9

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

Kotlin:可以通过元编程在编译期间修改函数吗?

在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.

overloading self-modifying kotlin kotlin-extension

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

将字节数组转换为十六进制字符串

令人惊讶的是(对我来说),这段代码没有做我想要的:

fun ByteArray.toHexString() : String {
    return this.joinToString("") { it.toString(16) }
}
Run Code Online (Sandbox Code Playgroud)

结果Byte是有符号的,所以你得到单个字节的负十六进制表示,这导致完全虚假的最终结果.

此外,Byte.toString不会填充您想要的前导零.

什么是最简单的(没有额外的库,理想情况下没有扩展名).最有效的修复?

arrays string hex byte kotlin

5
推荐指数
3
解决办法
6042
查看次数

如何将has_secure_password与field_with_errors一起使用

我使用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股利删除"密码摘要不能为空." 一共错误.

谢谢.

ruby ruby-on-rails

4
推荐指数
2
解决办法
4592
查看次数

修复 JScrollPane 的高度

我不知道我面临的问题是否仅针对我的情况,所以我写了一个精简版,说明了导致我的问题的原因(以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)

java swing

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

如何隐藏导航视图android的默认汉堡包图标

我需要隐藏汉堡图标

在此输入图像描述

在此输入图像描述

这是我的工具栏

我需要隐藏导航栏的默认汉堡包图标,然后从另一个按钮click.The导航栏加载它需要在我的商工具栏上的附件点击图标出现,需要消失当我点击以外(任何地方).可以这样做吗?

java android toolbar navigation-drawer

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

Kotlin - 使用 Array&lt;Double&gt; 或 DoubleArray

这两者的主要区别是什么:

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)

arrays kotlin

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

如何在java中找到数组的索引

我正在尝试使用此功能,但它给出的索引为 -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)

java arrays arraylist

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

如何动态调用 kotlin 的 object(singleton) 方法?

我有一个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)它会正常工作,但是有没有办法动态地做到这一点?

java reflection kotlin

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

如何使用 LINQ 找到 ±1 ± 2 ± 3 ± ... ± n = k 形式的所有可能组合?

我很难想出一个在 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)

c# linq

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

多行字符串文字语法

在许多语言中,多行字符串文字语法是

"""
Hello
World
"""
Run Code Online (Sandbox Code Playgroud)

但为什么它需要一个新的语法,为什么不使用"而不是"""

喜欢:

"Hello
 World"
Run Code Online (Sandbox Code Playgroud)

language-agnostic

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