我遇到了一个问题,我无法绕过头,希望有人可以帮助我。基本上,我有一个哈希消息和签名。要验证它,我必须使用Signing.verify(hash, signature)
在另一个类中调用方法。该接口也用于其他签名,因此无法更改,禁止静态方法,但Java告诉我该方法变为静态或无法验证它。
我对Java很新,但我希望有人可以帮助我。如果已经遇到问题,我很抱歉,但我没有找到任何东西。
您诚挚的,谢谢您的时间。
编辑: 对不起 - 这有点复杂。该方法在同一个包中看起来像这样 - 并且稍后要编程:
public class Signature implements SIG{
public boolean verify(String message, String signature){
//deadcode
return true;
}
}
我的代码如下所示:
public class SignatureTree implements Tree{
public boolean verify(String message, String signature, String hash){
byte[] publicKey=extractPK(signature);
if(Signature.verify(message,signature)==false){
System.err.println("SIGNATURE VERIFICATION FAILED");
}
//some other stuff
}
}
但是,Eclipse告诉我将Signature中的verify方法更改为静态方法 - 接口禁止该方法。那更清楚了吗?对不起 - 我是一名C程序员。非常感谢你。
答案 0 :(得分:0)
问题仍然不是100%清楚,但从我能理解的,您应该找到另一个实现该接口的类。
远射的另一种选择可能不起作用:
if(new Signature().verify(message,signature) == false) {
// fail code here
}
但是,该代码会假设Signature不是接口。
答案 1 :(得分:0)
您可能希望了解Java中的类及其成员:https://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html
请参阅,类类似于“对象模板”,您可以实例化某个类的对象。例如,让我们创建一个简单的类:
class MyClass {
public int var;
public MyClass(int var) {
this.var = var;
}
public void incrementVar() {
var = var + 1;
}
public static boolean isSmallerThanTen(int toTest) {
return (toTest < 10);
}
}
现在您可以创建作为MyClass实例的对象:
MyClass firstObject = MyClass(3);
MyClass secondObject = MyClass(10);
您可以在单个对象上调用incrementVar()
方法:
firstObject.incrementVar();
现在,firstObject.var
为4,但未触及第二个对象,secondObject.var
仍为10。
但是,你有这个方法isSmallerThanTen()
独立于某个实例的属性,你可以调用MyClass.isSmallerThanTen(5)
。但是,您无法调用MyClass.incrementVar()
,因为incrementVar()
不是静态的,只能在MyClass
的实例上调用,而不能在类本身上调用。
这就是你遇到的问题,Signature.verify()
不是静态的,这意味着你必须在Signature
的实例上调用它,而不是在类本身上调用它。
因此,以下两个解决方案都应该起作用,因为它们都实例化了Signature的对象:
if(new Signature().verify(message,signature) == false){
...
和
Signature sig = new Signature();
if(sig.verify(message, signature) == false) {
...
顺便说一句:您也可以将其写为if(!sig.verify(message, signature))
,!
是逻辑“不”,反转布尔值。