在"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,我应该在我自己的代码中抛出一个?
很抱歉,如果这只是一个微妙的疑问,但我在代码中使用了这种模式,我想确保我做的正确.
使用新的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
我在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运行相同的任务,(与
按钮,或从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 不会这样做.
我在本地部署的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) 我见过很多生成随机数的代码,例如
// 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) 我在 , 上使用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)
你可以看到 box-shadow 也被缩放了。不仅如此,它还会在动画结束时捕捉,看起来很难看。
关于如何transform在不缩放阴影的情况下保持快速 60fps动画的任何建议?动画高度会获得所需的效果,但在移动设备上滞后很多。
将阴影应用到div::after伪元素并转换div它不起作用,因为阴影也会被缩放。
我正在寻找仅在 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 中的命令。
我怎样才能防止这种情况发生?
如果您想直接跳到代码中,请使用 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) 我在用C++开始,有时我不知道我的编译器将是多么喜欢两种不同的实现方式alghoritm的.是否有一个简单的工具可以用来查看我的代码执行需要多长时间?
编辑:我正在使用gcc编译器
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) rust ×2
android ×1
async-await ×1
box-shadow ×1
c++ ×1
css ×1
exception ×1
facebook ×1
gradle ×1
hammerspoon ×1
intellij-14 ×1
java ×1
javascript ×1
performance ×1
profiler ×1
random ×1
transform ×1
windows ×1