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) 问题是为什么决定将变量作为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) 前一段时间我在使用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,所以让我强调问题的第二部分:如果是这样,你有关于如何快速做到这一点的建议(我已经不得不添加一些自定义匹配和转换算法,我不想要它太慢了?)
我有以下代码:
$('#select_albums').load(document.location.href + "&action=get_albums");
Run Code Online (Sandbox Code Playgroud)
但这只是用DOM中的id #select_albums替换了第一个找到的div.如何用id替换所有div?