小编Pea*_*nut的帖子

将子类传递给方法但是以超类作为参数?

我有一个抽象类,Vehicle有2个实现的子类RedVehicleYellowVehicle.

在另一个类中,我有一个List<Vehicle>包含两个子类的实例.我希望能够传递一个类类型的方法,然后使用该类型来决定我想要在哪些对象中执行某些操作List.

因为它Class是通用的我应该用它来参数化,但是将参数作为父类来Vehicle阻止调用代码工作,因为exampleMethod现在期望一种类型的Vehicle,而不是RedVehicleor 的子类YellowVehicle.

我觉得应该有一个干净的方法来实现这个功能的正确方法是什么?

我不一定要传递这种Class类型,如果有更好的建议,我会很乐意尝试这些.

来电代码:

service.exampleMethod(RedVehicle.class);
service.exampleMethod(YellowVehicle.class);
Run Code Online (Sandbox Code Playgroud)

字段/方法:

//List of vehicles
//Vehicle has 2 subclasses, RedVehicle and YellowVehicle
private List<Vehicle> vehicles;

//Having <Vehicle> as the Class parameter stops the calling code working
public void exampleMethod(Class<Vehicle> type) 
{
    for(Vehicle v : vehicles)
    {
        if(v.getClass().equals(type))
        {
            //do something
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

java oop

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

如何获取网页的公钥?

如何获取VeriSign等网站以及使用https(安全协议)的所有其他网站的公钥?

public-key-encryption public-key

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

移植C定义了Pythonic方式

tl; dr什么是Pythonic(Py 3)指定大量定义的位掩码和常量的方法?使用枚举或只是将一组consts作为类变量?和优点/缺点?

背景

我正在将C代码移植到Python 3.在C代码中有大量定义用作位掩码:

#define ERR_1 = 0x8
#define ERR_2 = 0x2
#define ERR_4 = 0x100
...
Run Code Online (Sandbox Code Playgroud)

我认为在Python中使用Pythonic的方法是使用a Enum,我遇到了IntEnum这意味着我不必.value像往常一样在任何地方使用它Enum:

from enum import IntEnum

class Errors(IntEnum):
    BROKEN = 0x8
    FUBARED = 0x4
    GIVEUP = 0x7

print(0xFF & Errors.BROKEN)
Run Code Online (Sandbox Code Playgroud)

但是,print(0xFF & ERR_1)如果我将它们全部作为有力的话,它仍然比我能得到的更加冗长.

python enums constants

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

“转储”方法在 android.location.Location 中有什么作用,为什么它没有文档?

Location 类中有一个名为dump的方法,但它没有与之相关的文档。

它究竟有什么作用?而且,如果它是已知的,为什么它没有文档?

android location geolocation

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

Java中的RSA和BigInteger

我有以下代码:

BigInteger d = new BigInteger(1,NFCUtil.hexStringToByteArray(IssPrivKey));
BigInteger n = new BigInteger(1,NFCUtil.hexStringToByteArray(IssPubKeyMod));
BigInteger X = new BigInteger(1,NFCUtil.hexStringToByteArray(unsignedPhoneCert));

BigInteger iccCertBI = X.modPow(d, n);

final String iccCert = iccCertBI.toString(16);

System.out.println("\nSigned Certificate: (int)" + iccCertBI +
            "\nSigned Certificate (hex): "+iccCert + 
            "\nsigned Cert length: "+iccCert.length());
Run Code Online (Sandbox Code Playgroud)

我正在做的是使用私有指数和公共模数签署一个字符串.所有长度都是288个字符或144个字节.踢球者是当我将它用于以下字符串时:

//Length 144
    final String unsignedTerCert="6A04846983677983FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF121" +
            "3AFAFAF01018001BDB011D89730D7958DCAF0D34A4668A65073F2766BAC3C3E7D551211A" +
            "1D7896085F1F4FDAA9A256579B0D4D6B1C7CF6C88D318886C55FB3CA91DB721376797058" +
            "F482A51A363B92A89DA81BB6A7FFBB6F8C8E109E5909EFFFFFFFFFFFFFFFFFFFFFFFFFFF" +
            "FFFFFFFFFFFFFBC";
Run Code Online (Sandbox Code Playgroud)

它给了我一个长度为288个字符或144个字节的字符串,就像我期待的那样.

但是使用它:

//Length 144
    final String unsignedPhoneCert="6A0400112233445566778899011401020301018001AE0A3CCBF6B1A997E4A4AEC7EDA6697F6B73C2EC18F8E3403F83237BD9863B4CD0BE0EBC2A8E3FB140251935F1D4EAEF2D7801FFC2CF36328E234676F96883BAB6547F82FE02455B59B6952231B130EE70980B74456168AD2A511A00448BFEA62593DCF9F3D9FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBC";
Run Code Online (Sandbox Code Playgroud)

给了我一串长度为287个字符的字符串.

所以我的问题是,BigInteger toString(16)方法中是否存在导致此问题的原因?

NB.我仍然可以使用公钥展示从BigInteger中解密它们,这就是让我觉得它与.toString()方法有关的原因.

任何帮助/提示将不胜感激,谢谢.

编辑:这是我从不正确的输出得到的输出:

Expo:36652731434641292350412815683229009979770975413220344544898857375896901092978000426765621805499026545042319009684553729382562239973283276192079521889464379604341193094271888918244826201023503324034315850394178807890994288745747556760470026279678747937975742329807945656583328292494373708777822442236249197245972251059241540578219194613740104635899
X:25332900759103924912689760614898214526937827890939506310067994686010108648336498000719255096072122266248508522922053911850606613923138698430079380374971383359222723175609119386369637533489684435824557964231714784677160255389973258884831385632708921103814163273457386881057406862373463121304854072959526597286211022281774584184894225094204257730492
X (hex):6a0400112233445566778899011401020301018001ae0a3ccbf6b1a997e4a4aec7eda6697f6b73c2ec18f8e3403f83237bd9863b4cd0be0ebc2a8e3fb140251935f1d4eaef2d7801ffc2cf36328e234676f96883bab6547f82fe02455b59b6952231b130ee70980b74456168ad2a511a00448bfea62593dcf9f3d9ffffffffffffffffffffffffffffffffffffffffbc

    Phone Signed Certificate: (int)2621041784071301050954845366555843081386290833242762939438653553587304361236513516037765146640763105648748143029523335470875071401132351534501879861341081099809142476414060273707263492268408647346182500147665413648376803840594353667155297685676942776395991299461798048817170064783101287983256626056086159016336001344190438106860395808579588320414
    Phone Signed Certificate (hex): …
Run Code Online (Sandbox Code Playgroud)

java android rsa biginteger

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

让Win32 MessageBox出现在其他程序上

我最近开始学习Python并写了一个小脚本,当某个网站改变内容时通知我.然后我将它作为计划任务添加到Windows,以便它可以每10分钟运行一次.我想知道网站立即更改,所以我添加了一个win32ui MessageBox,如果脚本检测到网站已更改,则会弹出该消息框.这是我用于MessageBox的小代码片段(富有想象力的文字,我知道):

win32ui.MessageBox("The website has changed.", "Website Change", 0)
Run Code Online (Sandbox Code Playgroud)

我的问题是,我花了大部分时间使用远程桌面,所以当MessageBox弹出它位于远程桌面会话后面时,有没有办法强制MessageBox出现在它上面?

在类似的说明中,当脚本运行时,命令行在我不想要的远程桌面会话上非常短暂地打开,是否有任何方法可以阻止此行为?

我对Windows特定的解决方案感到满意,因为我知道它可能意味着处理窗口管理器,或者可能是另一种通知我而不是使用MessageBox的方法.

python windows user-interface

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

从SVN存储库中删除空Java包

我正在使用Subversion 1.8.6运行Eclipse 3.7.2.我有一个我不再需要的包,所以我在Package Explorer中删除了包并提交了/src文件夹但是有一个错误,包中的一个文件已经过时了.我还原,确保所有文件都是最新的,然后删除包中的所有文件,但不删除包本身,这很有用.

现在,当我尝试删除Package Explorer中的空包时,使用服务器完全更新的包,并提交/src文件夹我收到错误:

org.apache.subversion.javahl.ClientException:svn:E155011:提交失败(详情如下):svn:E155011:目录'C:...\workspace ...\src\ecc'已过期

那我怎么能删除这个空包呢?

我已阅读如何在SVN控制下正确删除Java包但是我们的问题似乎略有不同.

java eclipse subclipse svn

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

VBA递增日期错误

我以前从未做过VBA,但朋友已经请求帮助,所以我一直在研究他的项目.我试图将给定日期增加一天,但我在DateAdd函数中收到"Object Required"错误.据我所知,我正在放入一个物体(firstDate)......

输入的日期,至少为我的测试目的,已经是12/03/2012的格式.Format和CDate函数似乎工作正常并解析日期.

这是代码,我在其中的DateAdd行中得到错误.

Sub GetDate()

Dim strDate As String

strDate = InputBox(Prompt:="Enter the first day of the week in dd/mm/yyyy format.", _
      title:="First day of the week", Default:="")

    If strDate = "" Or strDate = vbNullString Then
        Exit Sub
    Else
        Dim firstDate As Date
        firstDate = CDate(Format(strDate, "Short Date"))

        'Add to O and 6 after
        For inc = 0 To 6 Step 1
            Range(Chr(79 + inc) & 1) = firstDate
            firstDate = DateAdd(DateInterval.Day, 1, firstDate)
        Next

    End If
End …
Run Code Online (Sandbox Code Playgroud)

excel vba date excel-vba

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