小编ata*_*lor的帖子

metaClass.methods和metaClass.metaMethods有什么区别?

如果我向一个类添加一个元方法,我希望它会出现在Class.metaClass.metaMethods.但事实似乎并非如此.特别是,如果我这样做:

class Example {
    def realFoo() { "foo" }

}
Example.metaClass.metaFoo = { -> "foo" }

def reals = Example.metaClass.methods*.name.grep{it.contains("Foo")}
def metas = Example.metaClass.metaMethods*.name.grep{it.contains("Foo")}

println "reals = $reals, metas = $metas"
Run Code Online (Sandbox Code Playgroud)

我希望输出reals = [realFoo], metas = [metaFoo],但实际上我得到了reals = [realFoo, metaFoo], metas = [].

看起来新的元方法存储在方法中,而不是metaMethods.那么,metaClass.methods和之间有什么区别metaClass.metaMethods

groovy metaprogramming

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

在内存中运行时查看grails架构?

我想查看默认hsqldb内存数据库的grails模式,但是当我使用SquirrelSQL或DbVisualizer连接到内存数据库时userid: sa, password: (nothing),我只看到两个模式:

INFORMATION_SCHEMA
PUBLIC
Run Code Online (Sandbox Code Playgroud)

并且都不包含我的域表.这是怎么回事?

sql database grails groovy hsqldb

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

如何做Diffie Hellman密钥生成并在Java中检索原始密钥字节

我正在java中为现有程序编写测试工具.作为其中的一部分,我需要生成一个Diffie Hellman密钥对,并以其原始(即未编码的字节)形式将公钥传递给另一个程序.

我可以使用以下代码成功使用密钥对:

KeyPairGenerator kpg = KeyPairGenerator.getInstance("DiffieHellman");
kpg.initialize(512);
KeyPair dkp = kpg.generateKeyPair();
Run Code Online (Sandbox Code Playgroud)

但是,我似乎无法检索键的原始字节值:-(调用dkp.getPublic().getEncoded()返回一个字节数组,但它的键是x509编码格式.

我有三种可能的前进方式:

  1. 找到一些以原始形式从上面获取关键数据的方法.
  2. 将密钥的x509编码解码为其原始格式
  3. 以允许访问原始密钥的不同方式生成密钥

但我不知道如何去做任何一个(哪个会变得最好)?

任何帮助或建议将不胜感激!

java cryptography public-key-encryption diffie-hellman

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

Grails:将类型枚举的mysql字段映射到域类

如何将枚举类型的mysql字段映射到grails域类?

我正在使用grails v.2.0.3的现有(遗留)mySQL数据库.错误的列类型我收到错误:

failed; nested exception is org.hibernate.HibernateException: Wrong column type in
facilities.ost_fac_syslog for column log_type. Found: enum, expected: varchar(255)
Run Code Online (Sandbox Code Playgroud)

SQL字段定义为:

mysql> describe ost_fac_syslog;
+------------+---------------------------------+------+-----+--------------------
| Field      | Type                            | Null | Key | Default    
+------------+---------------------------------+------+-----+----------------------+
| log_id     | int(11) unsigned                | NO   | PRI | NULL    auto_increment |
| log_type   | enum('Debug','Warning','Error') | NO   | MUL | NULL    |                |
Run Code Online (Sandbox Code Playgroud)

我的域类是:

class OstFacSyslog {
    static mapping = {
       table 'ost_fac_syslog'
       version false
       id column: 'log_id', name:'logId'
       logType column: 'log_type', …
Run Code Online (Sandbox Code Playgroud)

mysql grails grails-orm grails-domain-class

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

缺少方法体,或在Java中声明抽象

我是Java的新手,并试图在我的计算机上运行.

一个简单的"hello world program"无法调用方法

class helloworld
{   
    public static void main(String[] param)
    {
        helloWorld();
        System.exit(0);
    }

    public static void helloWorld();
    {
        System.out.println("hello world");
    }
}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

.\helloworld.java:11: error: missing method body, or declare abstract
       public static  void helloworld();
                           ^
Run Code Online (Sandbox Code Playgroud)

java

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

在groovy中动态加载jar

我有一个groovy脚本createWidget.groovy:

 import com.example.widget

 Widget w = new Widget()
Run Code Online (Sandbox Code Playgroud)

当我像这样运行它时,这个脚本运行得很好:

$ groovy -cp /path/to/widget.jar createWidget.groovy
Run Code Online (Sandbox Code Playgroud)

但是,我想在脚本中硬编码类路径,以便用户不需要知道它在哪里,所以我修改了createWidget.groovy如下(这是在groovy中修改类路径的方法之一):

this.getClass().classLoader.rootLoader.addURL(new File("/path/to/widget.jar").toURL())

import com.example.widget

Widget w = new Widget()
Run Code Online (Sandbox Code Playgroud)

但是这总是在导入时出现运行时错误:unable to resolve class com.example.widget.

这看起来非常正统,我想你不能在导入之前搞乱rootLoader,还是别的什么?

java groovy classpath

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

在Groovy中获取下一个迭代器值

在使用Groovy 1.7.4循环遍历集合时,如何获取迭代器的下一个值

values.each {it ->
    println(it)
    println(it.next()) //wrong
}
Run Code Online (Sandbox Code Playgroud)

groovy loops

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

Java和PHP之间的加密/解密字符串

我正在使用 AES 加密来加密和解密服务器端 php 和 Android 应用程序(作为客户端)之间的字符串。

PHP中的加密字符串是:

HaxRKnMxT24kCJWUXaVvqDHahzurJQK+sYA4lIHql/U=
Run Code Online (Sandbox Code Playgroud)

在 Java 中它是:

HaxRKnMxT24kCJWUXaVvqD/KMEkJTPTXEcCsHIYGX9TGtCNOHQcJyUURPk8qlgf3
Run Code Online (Sandbox Code Playgroud)

我在 PHP 脚本中使用 phpseclib 进行加密。

我在这里缺少什么?

相关的Java代码在这里

SecretKeySpec skeySpec = new SecretKeySpec(pad16(pass), "AES");
Cipher c = Cipher.getInstance("AES");
c.init(Cipher.ENCRYPT_MODE, skeySpec);
byte[] out = c.doFinal( input )
Run Code Online (Sandbox Code Playgroud)

和这里的 PHP 代码:

$aes = new Crypt_AES();
$aes->setKey('password');
$encrypted_encoded_text =  base64_encode($aes->encrypt($plaintext));
Run Code Online (Sandbox Code Playgroud)

php java encryption android aes

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

如何配置db-reverse-engineer插件

我是一个Grails noob,试图为我的第一个项目配置db-reverse-engineer插件. 插件的文档表明我需要配置它,但我没有看到我应该编辑配置的位置.

我的项目中是否有需要编辑的配置文件?我在./grails-app/conf文件夹中搜索了grails.plugin(此插件配置的前缀),但没有找到任何内容.SO或Google搜索如何配置grails插件也会返回void.我知道这是一个蹩脚的问题,但我如何配置这个插件?是否有我需要使用的UI,或者有哪些文件可以编辑?

configuration grails groovy grails-plugin

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

如何在Java或Groovy中对时间字符串列表进行排序

我有一个字符串列表,每个字符串都包含这样的时间:

"03:00 AM","12:30 PM","16:15"

我需要按顺序对它们进行排序:首先放"am"次并比较小时数,而不仅仅是字符串中的第一个数字.

java sorting groovy

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