小编Jux*_*hin的帖子

'Catch分支是相同的',但仍需要我抓住它

在阅读我的代码时,我注意到我的IDE列出了一条警告,其中包含以下消息:

在JDK 7下的try块中报告相同的catch部分.可以使用quickfix将部分折叠为multi-catch部分.

并且还指定为JDK 7+抛出此警告

try块如下:

try {
    FileInputStream e = new FileInputStream("outings.ser");
    ObjectInputStream inputStream = new ObjectInputStream(e);
    return (ArrayList)inputStream.readObject();
} catch (FileNotFoundException var3) {
    var3.printStackTrace();
} catch (ClassNotFoundException var5) {
    var5.printStackTrace();
} catch (IOException ex){
    ex.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)

但是当删除时(抛出该特定警告的catch块):

catch (ClassNotFoundException var5) {
    var5.printStackTrace();
} catch (IOException ex){
    ex.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)

我仍会得到错误:

ObjectInputStream inputStream = new ObjectInputStream(e);
return (ArrayList)inputStream.readObject();
Run Code Online (Sandbox Code Playgroud)

我错过了一些我到目前为止还没想到的明显的东西吗?

java try-catch

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

如何检查路径是否存在?

选择似乎介于std::fs::PathExt和之间std::fs::metadata,但后者建议暂时使用,因为它更稳定.以下是我一直在使用的代码,因为它基于文档:

use std::fs;

pub fn path_exists(path: &str) -> bool {
    let metadata = try!(fs::metadata(path));
    assert!(metadata.is_file());
}
Run Code Online (Sandbox Code Playgroud)

但是,由于一些奇怪的原因let metadata = try!(fs::metadata(path))仍然需要函数返回一个,Result<T,E>即使我只是想返回一个布尔值,如图所示assert!(metadata.is_file()).

尽管很快就会有很多变化,但我如何绕过这个try!()问题呢?

以下是相关的编译器错误:

error[E0308]: mismatched types
 --> src/main.rs:4:20
  |
4 |     let metadata = try!(fs::metadata(path));
  |                    ^^^^^^^^^^^^^^^^^^^^^^^^ expected bool, found enum `std::result::Result`
  |
  = note: expected type `bool`
             found type `std::result::Result<_, _>`
  = note: this error originates in a macro outside of the current crate

error[E0308]: mismatched types
 --> …
Run Code Online (Sandbox Code Playgroud)

rust

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

IDE报告的不必要的拳击检查

IDE报告的不必要的拳击检查

我最近查看了一些关于Swing#JTable的Oracle教程上发布的代码.IntelIJ返回了一些关于在保存Table数据的多维数组中装箱原始变量的警告消息.


这是找到的数组,取自docs.oracle.com:

Object[][] data = {
            {"Kathy", "Smith",
                    "Snowboarding", new Integer(5), new Boolean(false)},
            {"John", "Doe",
                    "Rowing", new Integer(3), new Boolean(true)},
            {"Sue", "Black",
                    "Knitting", new Integer(2), new Boolean(false)},
            {"Jane", "White",
                    "Speed reading", new Integer(20), new Boolean(true)},
            {"Joe", "Brown",
                    "Pool", new Integer(10), new Boolean(false)}
    };
Run Code Online (Sandbox Code Playgroud)

所有包装的变量都收​​到此消息:

"不必要的拳击'新整数(5)'报告"拳击",例如在对象中包裹原始值.在Java 5和更新版本下不需要拳击,并且可以安全地删除.此检查仅报告项目或模块是否配置为使用5.0或更高的语言水平."


我知道Java中装箱和拆箱的概念,我的问题是为什么它在新版本的Java中"无关紧要",因为我看到很多开发人员在讨论或最近使用它.

此外,由于不需要拳击,应该用'new Integer(5)'代替什么?

java ide

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

Objects#requireNonNull的目的是什么?

在检查了JavaDocs中我正在考虑使用的方法之后requiredNonNull,我偶然发现了第一个带有单个参数的方法(T obj).

但是这个签名的特定方法的实际目的是什么?所有这一切只是投掷和NPE,我有点积极(因为我可能会遗漏一些明显的东西)无论如何都会抛出.

抛出: NullPointerException - 如果obj为null


后者实际上在调试某些代码方面是有意义的,正如文档所述,它主要是为参数验证而设计的

public static <T> T requireNonNull(T obj,String message)

检查指定的对象引用是否为null,如果是,则抛出自定义的NullPointerException.

因此,我可以与NPE一起打印特定信息,使调试变得更加容易.


考虑到这一点,我非常怀疑我会遇到一种情况,我宁愿只使用前者.请赐教.

tl; dr - 为什么你会使用不接收消息的重载.

java

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

基于文本搜索的算法不按预期运行

更新

我已经使用SO用户建议的更新代码更新了问题,并将澄清之前存在的任何模糊文本.

更新#2

我只能访问相关应用程序生成的日志文件.因此,我被限制在日志文件的内容中工作,并且没有超出该范围的解决方案.我会稍微修改一下样本数据.我想指出以下关键变量.

Thread ID - 范围从0..19 - 线程被多次使用.因此ScriptExecThread(2)可以在日志中多次出现.

Script - 每个线程都将在特定文件上运行脚本.同样的脚本可能会在同一个线程上运行,但不会在同一个线程AND文件上运行.

File- 每个人都Thread IDScript一个File.如果Thread(10)在运行myscript.scriptmyfile.file,然后,准确的线不会被再次执行.使用上述示例的成功示例将是这样的.

- - - 开始 - - -

线程(10)在myfile.file上启动myscript.script

线程(10)在myfile.file上完成了myscript.script

- - - 结束 - - - -

使用上面示例的不成功示例将是:

- - - 开始 - - -

线程(10)在myfile.file上启动myscript.script

- - - 结束 - - -


在解决我的查询之前,我将简要介绍所使用的代码和所需的行为.


摘要

我正在解析大型日志文件(平均需要100k到600k行),并且我试图按特定顺序检索某些信息.我已经根据我的要求制定了布尔代数,它似乎在纸上起作用但在代码上却没有那么多(我肯定错过了一些显而易见的东西).我想提前告知代码没有任何形状或形式优化,现在我只想让它工作.

在此日志文件中,您可以看到某些线程在它们启动时挂起但从未完成.可能的线程ID范围的数量.这是一些伪代码:

    REGEX = "ScriptExecThread(\\([0-9]+\\)).*?(finished|starting)" //in java
    Set started, finished …
Run Code Online (Sandbox Code Playgroud)

java algorithm text

9
推荐指数
2
解决办法
360
查看次数

通过Cargo传递程序参数

我有一些示例代码,目前正在使用getopts,它被指定为依赖项Cargo.toml

[dependencies]
getopts = "0.2"
Run Code Online (Sandbox Code Playgroud)

但是-t,由于显而易见的原因,我似乎无法--test通过货物(例如cargo run --test)传递参数(,).

由于我已经指定了外部依赖项,因此尝试运行rustc src/main.rs --test也不会起作用:

src/main.rs:2:5: 2:21 error: unresolved import `getopts::Options`. There is no `Options` in `getopts`
src/main.rs:2 use getopts::Options;
              ^~~~~~~~~~~~~~~~
error: aborting due to previous error
Run Code Online (Sandbox Code Playgroud)

是否有其他方法可以实现这一目标或暂时的替代方案?

rust

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

如何使用 Clap Args 的内部库 Enum

我目前正在开发一个安全工具的Rust 端口。根据 Rust 的指南,我想将核心库隔离到自己的包中,以便我们可以创建与核心库交互的各种工具(CLI、API、流等),而无需将它们耦合在一起。

核心库公开了两个公共枚举,其中之一是PermutationMode(截断的):

#[derive(Debug, Copy, Clone, PartialEq)]
pub enum PermutationMode {
    All,
    Addition,
    BitSquatting,
    Homoglyph,
}
Run Code Online (Sandbox Code Playgroud)

使用Clap创建 CLI 实用程序时,我想将此库 Enum 扩展为 CLI 的一部分,如下所示:

use clap::Clap;

use twistrs::permutate::PermutationMode;

#[derive(Clap, PartialEq, Debug)]
#[clap(name = "twistrs-cli")]
struct Opts {
    #[clap(short, long)]
    registered_domains: bool,

    #[clap(arg_enum)]
    permutation_mode: PermutationMode,
}
Run Code Online (Sandbox Code Playgroud)

这样,在调用 CLI 时,我们可以将排列模式从用户无缝传递到 CLI、库,并且 CLI 无需了解内部模式(如果库添加了更多模式)。

./twist-cli --registered-domains --permutation_mode=all example.com
Run Code Online (Sandbox Code Playgroud)

目前这似乎不可能(这是有道理的)。一种尝试是使用类型别名:

./twist-cli --registered-domains --permutation_mode=all example.com
Run Code Online (Sandbox Code Playgroud)

但是,我们不能将派生宏用于类型别名。我还尝试“克隆”枚举并尝试映射到库枚举:

#[derive(Clap)]
type ArgPermutationMode = PermutationMode
Run Code Online (Sandbox Code Playgroud)

哪个不编译。


问题- 是否可以扩展内部库 Enum 以将其用作 …

rust clap

8
推荐指数
2
解决办法
8557
查看次数

会话固定 VS XSRF/CSRF

什么分别定义了两者?

会话固定描述为:

会话固定是一种允许攻击者劫持有效用户会话的攻击。该攻击探索了 Web 应用程序管理会话 ID 方式的限制,更具体地说是易受攻击的 Web 应用程序。`

资料来源:OWASP

这似乎与 CSRF 所利用的相当接近。两者的区别是什么Session fixation仅仅是来自CSRF的同义词或分支?

还想提一下,来自我提供的 OWASP 链接的关键术语与 CSRF 中提到的几乎相同

php security session owasp

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

Python循环双重打印

使用下面的代码,我能够得到正确的答案,但重复两次.

例如,我只想要一个结果[1.2038, 1.206],但下面的代码打印出来[1.2038, 1.206, 1.2038, 1.206].谁知道我的代码出了什么问题?任何帮助将不胜感激.谢谢!

spot = [1.2020, 1.2040]
forwardSwap = [0.0018, 0.0020]
forwardOutright = []

for i in range(len(spot)):
    for i in range(len(forwardSwap)):
        forwardOutright.append(spot[i] + forwardSwap[i])

print forwardOutright
Run Code Online (Sandbox Code Playgroud)

python math python-2.7

6
推荐指数
2
解决办法
1691
查看次数

如果传递最终对象,是否仍应检查null?

查看以下代码:

    @Override
    public int compareTo(final Intersection o) {
        if (o == null) 
            return 0;

        double distance = t;
        double distance2 = o.t;

        if (distance == distance2) 
            return 0;


        return distance2 > distance ? -1 : 1;
    }
Run Code Online (Sandbox Code Playgroud)

一切似乎都很好,但是在两个不同的条件场合返回0的事实确实让我感到有些困扰.如果我不动不过的变量赋值distancedistance2顶端,我的IDE警告我说,

            if (o == null) 
              return 0;
Run Code Online (Sandbox Code Playgroud)

那将是'死'代码.如果是这种情况,在这种情况下甚至应该检查null吗?


我的意思是:

@Override
    public int compareTo(final Intersection o) {

        double distance = t;
        double distance2 = o.t;

        if (o == null) 
            return 0;

        if (distance == distance2) 
            return 0;


        return distance2 > …
Run Code Online (Sandbox Code Playgroud)

java

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

标签 统计

java ×5

rust ×3

algorithm ×1

clap ×1

ide ×1

math ×1

owasp ×1

php ×1

python ×1

python-2.7 ×1

security ×1

session ×1

text ×1

try-catch ×1