小编dop*_*umi的帖子

什么是AssertionError?在哪种情况下我应该从我自己的代码中抛出它?

在"Effective Java,2nd edition"一书的第2项中,有一段代码,其中作者想要禁止对象的空初始化.

class Example {
    private Example() {
        throw new AssertionError();
    }
}
Run Code Online (Sandbox Code Playgroud)

抛出的异常类型让我感到困惑.

我不明白是否AssertionError因为缺少更合适的错误而抛出,或者因为它应该是这样的.

据我所知,当assert语句失败时,框架会抛出此错误.另外,在javadoc中它只是写的

[AssertionError]抛出,表示断言失败.

但我没有看到任何断言(真假陈述)在这里被侵犯.当然,"你不应该实例化这个类的一个项目"的声明已被违反,但如果这是背后的逻辑,那么我们都应该把它扔到AssertionError各处,这显然不会发生什么.

FWIW,我刚刚抛出一个

new IllegalStateException("Must not instantiate an element of this class")
Run Code Online (Sandbox Code Playgroud)

这有什么问题吗?在这种情况下AssertionError,我应该在我自己的代码中抛出一个?

很抱歉,如果这只是一个微妙的疑问,但我在代码中使用了这种模式,我想确保我做的正确.

java exception effective-java

61
推荐指数
4
解决办法
13万
查看次数

如何在工具栏的右侧放置ProgressBar?

使用新的Lollipop API,如果我们想要个性化操作栏方面,我们必须使用工具栏.

正如Chris Banes所说,将ProgressBar添加到工具栏就像将其添加到工具栏ViewGroup一样简单.

<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/material_green_500"
    android:minHeight="?attr/actionBarSize"
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
    app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

    <!-- Color is Brown 500 -->
    <ProgressBar
        android:id="@+id/toolbar_progress_bar"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:indeterminateTint="#795548"
        android:indeterminateTintMode="src_in"/>

</android.support.v7.widget.Toolbar>
Run Code Online (Sandbox Code Playgroud)

但是,我们如何将它放在工具栏的右侧?

layout_gravity似乎没有为工具栏定义该属性.从xml设置它没有任何效果.我试图改变ProgressBar的宽度,但没有成功.

我该怎么办?

编辑:这个问题有一个程序化的解决方案,请参阅@mdelolmo回复.

android android-layout material-design android-5.0-lollipop android-toolbar

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

从IntelliJ IDEA运行时,为什么环境变量始终为空(仅)Gradle?

我在gradle中编写了一个抓取环境变量的任务.

task run(type:Exec) {
    def SYS_ENV = System.getenv("SYSTEM_ENV")
    // do something with SYS_ENV 
}
Run Code Online (Sandbox Code Playgroud)

如果我运行这个任务./gradlew :taskName一切都很好,但如果我从IntelliJ IDEA运行相同的任务,(与https://www.jetbrains.com/img/webhelp/run.png按钮,或从gradle面板)env变量出来null.

我尝试重启IntelliJ,我也尝试了Invalidate Caches/Restart选项,但没有任何改变.

是不是IntelliJ IDEA应该运行Gradle脚本,就像我从命令运行它一样?如何从Grade中获取env变量,以便在运行IntelliJ时脚本不会失败?

编辑:我做了一堆试验,我可以做lanchctl setenv MY_PATH MY_VALUE 工作,但它不是永久性的,并且添加setenv MY_PATH MY_VALUE/etc/lanchd.conf 不会这样做.

intellij-idea gradle intellij-14

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

为什么我在Facebook登录页面上收到此警告消息?

我在本地部署的Web应用程序上首次尝试使用Facebook登录API.

在他们的文档中使用片段初始化API,并在我的HTML页面上有一个按钮

<button type="button" onclick="fbLogin()">
Run Code Online (Sandbox Code Playgroud)

哪里fbLogin()

function fbLogin() {
    FB.login(function(response) {
        console.log(response);

        // handle the response
        if (response.status === 'connected') {
            // Logged into your app and Facebook.
        } else if (response.status === 'not_authorized') {
            // The person is logged into Facebook, but not your app.
        } else {
            // The person is not logged into Facebook, so we're not sure if
            // they are logged into this app or not.
        }
    }, {scope: …
Run Code Online (Sandbox Code Playgroud)

facebook facebook-javascript-sdk

7
推荐指数
0
解决办法
689
查看次数

随机数,Math.floor(...) vs Math.ceil(...)

我见过很多生成随机数的代码,例如

// random integers in the interval [1, 10]
Math.floor(Math.random()*10 + 1)
Run Code Online (Sandbox Code Playgroud)

无论如何,我觉得我错过了一些东西。为什么人们不使用更简洁的方式

Math.ceil(Math.random()*10);
Run Code Online (Sandbox Code Playgroud)

?

我试图测试随机性,到目前为止似乎是正确的。

其实后面的代码

// will generate random integers from 1 to 4
var frequencies = [ 0, 0, 0, 0, 0 ]; // not using the first place
var randomNumber;
for ( var i = 0; i < 1*1000*1000; ++i ) {
   randomNumber = Math.ceil(Math.random()*4);
   frequencies[randomNumber]++;
}

for ( var i = 1; i <= 4; ++i ) {
   console.log(i +": "+ frequencies[i]);
}
Run Code Online (Sandbox Code Playgroud)

打印出来

1: …
Run Code Online (Sandbox Code Playgroud)

javascript random

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

如何在不以高性能方式缩放其投射的框阴影的情况下缩放 div?

我在 , 上使用transform scaleY动画div来廉价地为其高度设置动画,但是当box-shadow应用到它时效果不佳。

div {
    width: 300px;
    height: 100px;
    transform: scaleY(1);
    transition: all 2000ms;
    transform-origin: 0 0;
    background-color: yellow;
    box-shadow: 0 4px 5px 0 rgba(0, 0, 0, 0.14),
                0 1px 10px 0 rgba(0, 0, 0, 0.12),
                0 2px 4px -1px rgba(0, 0, 0, 0.4);
}
div:hover {
    transform: scaleY(5);
}
Run Code Online (Sandbox Code Playgroud)
<div></div>
Run Code Online (Sandbox Code Playgroud)

jsbin.com demo

你可以看到 box-shadow 也被缩放了。不仅如此,它还会在动画结束时捕捉,看起来很难看。

关于如何transform缩放阴影的情况下保持快速 60fps动画的任何建议?动画高度会获得所需的效果,但在移动设备上滞后很多。

已经试过了

将阴影应用到div::after伪元素并转换div它不起作用,因为阴影也会被缩放。

css performance transform css-animations box-shadow

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

如何防止锤勺热键覆盖其他应用程序中的热键?

我正在寻找仅在 Google Chrome 中可用的特定热键:

hs.hotkey.bind({"cmd"}, "0", function()
  if hs.window.focusedWindow():application():name() == 'Google Chrome' then
    hs.eventtap.keyStrokes("000000000000000000")
  end
end)
Run Code Online (Sandbox Code Playgroud)

这种方法的问题是热键将在其他应用程序上变得不可用。例如CMD+0不会触发Reset ZoomDiscord 中的命令。

我怎样才能防止这种情况发生?

hammerspoon

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

重构函数时如何避免出现生命周期问题?

如果您想直接跳到代码中,请使用 Playground 。

问题

我正在尝试实现一个filter_con<T, F>(v: Vec<T>, predicate: F)允许Vec通过谓词对 ,进行并发过滤的函数async

也就是说,不要这样做:

let arr = vec![...];
let arr_filtered = join_all(arr.into_iter().map(|it| async move {
    if some_getter(&it).await > some_value {
        Some(it)
    } else {
        None
    }
}))
.await
.into_iter()
.filter_map(|it| it)
.collect::<Vec<T>>()
Run Code Online (Sandbox Code Playgroud)

每次我需要过滤 a 时Vec,我希望能够:

let arr = vec![...];
let arr_filtered = filter_con(arr, |it| async move { 
  some_getter(&it).await > some_value 
}).await
Run Code Online (Sandbox Code Playgroud)

暂定实施

我已将该函数提取到自己的函数中,但遇到了生命周期问题

async fn filter_con<T, B, F>(arr: Vec<T>, predicate: F) -> Vec<T>
where …
Run Code Online (Sandbox Code Playgroud)

rust async-await

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

Windows上的C++ Profiler

我在用C++开始,有时我不知道我的编译器将是多么喜欢两种不同的实现方式alghoritm的.是否有一个简单的工具可以用来查看我的代码执行需要多长时间?

编辑:我正在使用gcc编译器

c++ windows profiler

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

如何使用高阶异步函数来过滤 Vec?

通过谓词过滤async,“简单”的方式

一种方法是使用join_all!()sFuture计算每个项目的过滤器。然后根据这些同步过滤:

let arr = vec![...]
let filters = join_all!(arr.iter().map(|it| async { predicate(it).await })
let filtered = arr.enumerate().filter(|index, item| filters[index]).collect::<Vec<_>>();
Run Code Online (Sandbox Code Playgroud)

然而,在探索 Rust 时,通过迭代器有一种更干净的futures::stream::iter方法:

let filtered = futures::stream::iter(vec![...])
  .filter(|item| async { predicate(item).await })
  .collect::<Vec<_>>
  .await
Run Code Online (Sandbox Code Playgroud)

到现在为止一切都很好。


可配置过滤器:麻烦开始了

如果我们想使用函数式 API 来predicate轻松配置怎么办?

在这种情况下,我们的调用将如下所示:

let filtered = futures::stream::iter(vec![...])
  .filter(by_length(4)) // neat!
  .collect::<Vec<_>>
  .await
Run Code Online (Sandbox Code Playgroud)

和谓词:

fn by_length(min_length: usize) -> impl FnMut(&i32) -> Future<Output = bool> {
    |n| async { query_length(n).await > min_length }
} …
Run Code Online (Sandbox Code Playgroud)

higher-order-functions rust

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