我正在使用Eclipse开发应用程序,我有两台计算机(台式机和笔记本电脑),我想用它来开发这个应用程序.我最近用Eclipse设置了我的笔记本电脑并将项目导入到该计算机.但是,我意识到我无法将笔记本电脑上的应用程序启动到手机上,因为从桌面构建应用程序时自动生成的签名与笔记本电脑上自动生成的签名不一致.除非我在手机上卸载它.有谁知道如何从一个Eclipse导出自动生成的签名并将其导入另一个?
interface test{
foo(boo:string);
}
class coo implements test{
foo(){
}
}
Run Code Online (Sandbox Code Playgroud)
在playGround 中,虽然函数签名不像接口所说的那样但这并不会生成和错误,接口的预期行为是强制签名.
为什么会这样?
谢谢
class NewClass{
public static void main(String a){
System.out.print("Hello");
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试执行上面的代码时,它会显示错误,找不到主要方法.但是,当我换public static void main(String a)到public static void main(String... a)或public static void main(String a[]).然后,它的工作.. !!
那么,我的问题是我们可以用多少种不同的方式来编写法律主要方法签名以及这个签名public static void main(String... a)意味着什么?
我有一个系统应用程序,OEM安装系统映像,但由我签名.如果我将更新的apk上传到市场,市场应用程序是否会自动安装此更新?
如果我的系统应用程序使用平台签名而不是我的签名,这意味着任何更新也必须使用平台签名进行签名,对吗?可以从市场更新平台签名的apk吗?
我正在为jdk6阅读令人难以置信的书"java scjp认证的程序员指南",以及关于泛型覆盖的部分.在它上面描述了subsignature和override-equivalent,并描述了一些我引用的覆盖等价的例子:
给定以下三个类中的泛型方法声明:
static <T> void merge (MyStack<T> s1, MyStack<T> s2) { /*...*/ }
static <T> void merge (MyStack<T> s1, MyStack<? extends T> s2) { /*...*/ }
static <T> void merge (MyStack<T> s1, MyStack<? super T> s2) { /*...*/ }在擦除之后,所有三种方法的签名是:
merge(MyStack, MyStack)即,方法的签名是覆盖等价的,因此这些方法不会过载.
我并不完全同意这些方法是覆盖等价的,事实上我认为这些方法有一个"擦除名称冲突",但没有一个是另一个的子签名...可能我错了所以我想对此有所了解.
子签名的定义让我觉得它们不是它们之间的子签名.
在JSL 6#8.4.2方法签名中(http://docs.oracle.com/javase/specs/jls/se6/html/classes.html#8.4.2)
如果两个方法具有相同的名称和参数类型,则它们具有相同的签名.如果满足以下所有条件,则两个方法或构造函数声明M和N具有相同的参数类型:
他们.具有相同数量的形式参数(可能为零)
它们具有相同数量的类型参数(可能为零)
让我们
<A1,...,An>为M的形式类型参数,让<B1,...,Bn>是N的形式类型参数重命名的N的类型艾一碧的每次出现相应类型变量的范围和参数类型M和N都是一样的了.如果m2与m1具有相同的签名,或者m1的签名与m2的签名擦除相同,则方法m1的签名是方法m2的签名的子签名.
...如果m1是m2的子签名或m2是m1的子签名,则两个方法签名m1和m2是覆盖等价的.
在JSL 8#8.4.2中.Method Signature(http://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls-8.4.2)
两个方法或构造函数M和N具有相同的签名,如果它们具有相同的名称,相同的类型参数(如果有的话)(第8.4.4节),并且在将形式参数类型N调整为类型参数之后M,相同的形式参数类型.
方法m1的签名是方法m2的签名的子签名,如果:
m2与m1具有相同的签名,或
m1的签名与m2的签名擦除相同.
如果m1是m2的子签名或m2是m1的子签名,则两个方法签名m1和m2是覆盖等价的.
简单来说,我的疑问是,从擦除方面的子签名定义我明白"没有擦除的一个签名等于来自其他签名的擦除"......而不是"擦除后的两个签名是相等的".它的微妙但重要(顺便说一句,覆盖等效定义是基于子签名定义,这就是为什么我用子签名来问)
我在这个问题中的假设是,我指定的签名完全描述了方法将接受的所有内容.显然我错了,但无论如何我想得到它.如果我没有在签名中指定它,我不希望其他人能够提供它作为一个认为它会做某事的论据.
我为方法创建了一个带有单个位置参数的签名,我希望它只接受单个位置参数.但是,它也接受命名参数而无需投诉:
class SomeClass {
method something ( Int $n ) { 'Ran something' }
}
put SomeClass.something: 137; # Ran something
put SomeClass.something: 137, :foo('bar'); # Ran something
Run Code Online (Sandbox Code Playgroud)
但是,如果我定义一个采用命名参数的方法,那么每次我定义它时都会调用它.此外,虽然我认为我说它需要一个命名参数foo,但它不是必需的,它仍然接受我没有指定的命名参数:
class SomeClass {
multi method something ( Int $n ) { 'Ran something' }
multi method something ( Int $n, :$foo ) { "Ran $foo" }
}
put SomeClass.something: 137; # Ran
put SomeClass.something: 137, :foo('bar'); # Ran bar
put SomeClass.something: 137, :bar('foo'); # Ran
Run Code Online (Sandbox Code Playgroud)
所以,有些问题:
如何指定包含我想接受的所有内容的签名并排除其他所有内容?
如何强制Perl …
对于以下多子脚本:
multi sub Screen_get_valid_string($prompt, $accept_empty_string, $max_length = 999) { return "abc" }
multi sub Screen_get_valid_string($prompt, $max_length = 999) { return "def" }
my $return = Screen_get_valid_string("enter value for string => ", True);
say 'return is ', $return;
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
Ambiguous call to 'Screen_get_valid_string';
these signatures all match:
:($prompt, $accept_empty_string, $max_length = 999)
:($prompt, $max_length = 999)
Run Code Online (Sandbox Code Playgroud)
我发现有一个正确的多子调用的唯一方法是使用命名参数:
multi sub Screen_get_valid_string(:$prompt, :$accept_empty_string, :$max_length = 999) { return "abc" }
multi sub Screen_get_valid_string(:$prompt, :$max_length = 999) { return "def" }
my $return = …Run Code Online (Sandbox Code Playgroud) 我遇到了以太签名不匹配的问题。
一切正常。已经将js 代码中的domainData, types,变量与合约进行了比较。message
下面是生成签名和调用合约的JS代码。
const contractAddress = await contract.address;
domainData.chainId = 31337;
domainData.verifyingContract = contractAddress;
const signature = await signer._signTypedData(domainData, types, message);
const { r, s, v } = ethers.utils.splitSignature(signature);
const result = await contract.recoverAddressFromTypedData(
message,
v,
r,
s
);
expect(result).to.equal(signer.address);
Run Code Online (Sandbox Code Playgroud)
下面是使用“@openzeppelin/contracts/utils/cryptography/draft-EIP712.sol”的 Solidity 代码
function recoverAddressFromTypedData(
Bid memory bid,
uint8 v,
bytes32 r,
bytes32 s
) public view returns (address) {
bytes32 digest = _hashTypedDataV4(hashBid(bid));
address signer = ecrecover(digest, v, r, s);
return signer;
} …Run Code Online (Sandbox Code Playgroud) 我正在开发一个需要验证用户签名的 dapp。使用 Metamask 测试时,一切正常。
当尝试验证 Ambire 钱包的签名时,我从 ethers.utils.verifyMessage 收到“错误:无效签名字符串”。例如,这是我从 Ambire 获得的签名:
0xf1b5f561c1914d513f4020edd397f729836e26eeae8f1b9e4070d134492aa38b0a84b9d7cefe06f180ade91595fd74c4e845c2b8c2d053fa57785fdf5ec5dca31c01
当我尝试验证时会发生这种情况
require('ethers').utils.verifyMessage('test', '0xf1b5f561c1914d513f4020edd397f729836e26eeae8f1b9e4070d134492aa38b0a84b9d7cefe06f180ade91595fd74c4e845c2b8c2d053fa57785fdf5ec5dca31c01')
Uncaught:
Error: invalid signature string (argument="signature", value="0xf1b5f561c1914d513f4020edd397f729836e26eeae8f1b9e4070d134492aa38b0a84b9d7cefe06f180ade91595fd74c4e845c2b8c2d053fa57785fdf5ec5dca31c01", code=INVALID_ARGUMENT, version=bytes/5.6.1)
Run Code Online (Sandbox Code Playgroud)
知道这是否可以解决吗?
我使用“forall”量词声明了两个函数。其中第一个在签名之前有一个量词,其中包含所有泛型类型参数。第二个使用量词代替每个泛型类型参数的第一个用法。
\nf :: forall a b c. a -> b -> c -> b -> a\nf a _ _ _ = a\n\ng :: forall a. a ->\n forall b. b ->\n forall c. c -> b -> a\ng a _ _ _ = a\nRun Code Online (Sandbox Code Playgroud)\n我期望这两个函数是相同的(区别仅在于描述的风格),但以下两个测试告诉我事实并非如此。
\nw_f :: (forall a b c. a -> b -> c -> b -> a) -> Bool\nw_f _ = True\n\nw_g :: (forall a. a ->\n forall b. b ->\n forall c. c …Run Code Online (Sandbox Code Playgroud) signature ×10
android ×2
java ×2
perl6 ×2
build ×1
erasure ×1
ethereum ×1
ethers.js ×1
function ×1
generics ×1
google-play ×1
haskell ×1
interface ×1
javascript ×1
main-method ×1
openzeppelin ×1
platform ×1
solidity ×1
system ×1
typescript ×1