我有一个Id<T>带有单个方法的通用java接口T getId()和一个MyClass实现的类Id<Long>.当我检查MyClass使用java反射声明的方法时,我看到两个方法:一个具有返回类型Long,另一个具有返回类型Object.第二种方法来自何处,如何将其删除?
这是来源:
package mypackage;
import java.lang.reflect.Method;
public class MainClass {
public static void main(String[] args) {
for (Method method : MyClass.class.getDeclaredMethods()) {
System.out.println(method);
}
// prints out two lines
// public java.lang.Long mypackage.MyClass.getId() <-- ok
// public java.lang.Object mypackage.MyClass.getId() <-- not ok
}
}
interface Id<T> {
T getId();
}
class MyClass implements Id<Long> {
@Override
public Long getId() {
return new Long(0);
};
}
Run Code Online (Sandbox Code Playgroud) 我正在开发一个Silverlight应用程序,我过度使用了观察者模式.在我的实现中,我创建了两个接口IObservable<T>和IObserver<T>.前者包含将观察者附加到观察者的方法.后者有一个方法Notify(IObservable<T> observable, ...),observer.Notify(this, ...)当observable改变了状态时,observable 将自身作为参数传递.
现在我偶然发现了"事件",对我来说,似乎这就是观察者模式的一个实现,只是代表而不是前面提到的Notify方法.是对的吗?
我不太了解代表,并且不想花费数小时来重写我的代码只是为了最终得到与它已经做同样事情的代码.另一方面,事件可能优于基于接口的观察者模式.我错过了什么吗?
我在C#(或Java,无关紧要)中实现了一个简单的树结构,其中所有内容都围绕着抽象类Node及其子类.Node提供与数学图论相关的方法和属性.例如,Node.Parent引用父节点和Node.Children子节点
class Node {
Node Parent;
Node[] Children;
void appendNode(Node node) { ... }
}
Run Code Online (Sandbox Code Playgroud)
我正在使用树来执行计算.计算涉及大量递归,我还需要为每个节点存储中间值.对于每个计算,我已经向Node类引入了其他属性和方法,例如
class Node {
Node Parent;
Node[] Children;
// Calculate weight
int weight; // current weight
void recalculateWeight() {
// perform some heavily recursive stuff
// involving Parent.recalculateWeight()
// and update the value of the variable weight
}
int price; // current price
void recalculatePrice() {
// perform some heavily recursive stuff
// involving Parent.recalculatePrice()
// and update the value of the variable price
} …Run Code Online (Sandbox Code Playgroud)