小编Daf*_*aff的帖子

使用invokeMethod在Groovy中动态实现接口

Groovy提供了一些非常简洁的语言功能来处理和实现Java接口,但我似乎有些困惑.

我想在Groovy类上动态实现一个接口,并使用GroovyInterceptable.invokeMethod拦截该接口上的所有方法调用.这是我到目前为止所尝试的:

public interface TestInterface
{
    public void doBla();
    public String hello(String world);
}


import groovy.lang.GroovyInterceptable;

class GormInterfaceDispatcher implements GroovyInterceptable
{
    def invokeMethod(String name, args) {
        System.out.println ("Beginning $name with $args")
        def metaMethod = metaClass.getMetaMethod(name, args)
        def result = null
        if(!metaMethod)
        {
            // Do something cool here with the method call

        }
        else
            result = metaMethod.invoke(this, args)
        System.out.println ("Completed $name")
        return result
    }

    TestInterface getFromClosure()
    {
        // This works, but how do I get the method name from here?
        // …
Run Code Online (Sandbox Code Playgroud)

reflection groovy interface dynamic

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

接口变量默认为final和static,方法是public和abstract

问题是为什么决定将变量作为final和static,并将方法默认为public和abstract.

是否有任何特殊原因使它们成为隐式,变量为final和static,方法为public和abstract.

为什么他们不允许静态方法但允许静态变量?

我们在Java中具有多重继承功能的接口,以避免钻石问题.但它如何解决钻石问题,因为它不允许静态方法.

在下面的程序中,两个接口都有相同名称的方法..但是实现只有一个我们实现...这是钻石问题的解决方法吗?

interface testInt {
    int m = 0;
    void testMethod();
}

interface testInt1 {
    int m = 10;
    void testMethod();
}

public class interfaceCheck implements testInt, testInt1{
        public void testMethod() {
            System . out . println ( "m is"+ testInt.m );   
             System . out . println ( "Hi World!" );    
        }
}
Run Code Online (Sandbox Code Playgroud)

java

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

意外的Class.getMethod行为

前一段时间我在使用Class.getMethod和autoboxing时遇到了类似的问题,在你自己的查找算法中实现它是有意义的.但真正让我感到困惑的是,以下内容无效:

public class TestClass
{
    public String doSomething(Serializable s)
    {
        return s.toString();
    }

    public static void main(String[] args) throws SecurityException, NoSuchMethodException
    {
        TestClass tc = new TestClass();
        Method m = tc.getClass().getMethod("doSomething", String.class);
    }
}
Run Code Online (Sandbox Code Playgroud)

String.class实现了Serializable接口,我真的希望它包含在查找方法中.我是否也必须在自己的查找算法中考虑这一点?

编辑:我确实读过Javadoc,所以让我强调问题的第二部分:如果是这样,你有关于如何快速做到这一点的建议(我已经不得不添加一些自定义匹配和转换算法,我不想要它太慢了?)

java reflection

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

用值替换所有div

我有以下代码:

$('#select_albums').load(document.location.href + "&action=get_albums");
Run Code Online (Sandbox Code Playgroud)

但这只是用DOM中的id #select_albums替换了第一个找到的div.如何用id替换所有div?

javascript jquery

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

标签 统计

java ×2

reflection ×2

dynamic ×1

groovy ×1

interface ×1

javascript ×1

jquery ×1