在Eclipse的AVD中,我创建了两个除密度值之外相同的设备.装置1具有abstracted LCD density240; 设备2具有160.两者的分辨率为480x800.
有人可以向我解释为什么设备1屏幕上的元素看起来"更大"吗?由于它们具有相同的分辨率,它们不应该显示相同数量的像素吗?如果有的话,因为设备1具有更高的密度,不应该显示更多的细节/屏幕空间?
设备1
设备2
Screeshots - (点击查看大图)
如上所示,我在两个设备上的随机屏幕位置绘制一个半径为15dp的圆.设备2上的圆圈肯定更小,操作栏也是如此.为什么是这样?
请考虑以下两个代码示例:
例1.
public void setValue(int value)
{
mValue = value;
}
Run Code Online (Sandbox Code Playgroud)
例2.
public void setValue(int value)
{
if (mValue != value)
{
mValue = value;
}
}
Run Code Online (Sandbox Code Playgroud)
假装您的任务是将一些Java代码优化到绝对最大值,超出所有常识.
第二个代码示例是第一个的优化吗?我的意思是,在最低级别的Java或JVM中if条件检查和int赋值之间是否存在任何差异(无论多么微小)?
我想在我自己的类中嵌套一个Exception子类,如下所示:
class Foo(object):
def bar(self):
#does something that raises MyException
class MyException(Exception):
pass
Run Code Online (Sandbox Code Playgroud)
这样,我只需要从另一个模块调用bar()时导入Foo(而不是MyException).但是我在下面的内容不起作用:
from foo_module import Foo
foo = Foo()
try:
foo.bar()
except Foo.MyException as e:
print e
Run Code Online (Sandbox Code Playgroud)
Python给出了这个错误:
类型对象'Foo'没有属性'MyException'
有没有办法做到这一点?
锁定私有字段变量(而不是使用锁定对象)是安全/可接受的做法吗?这样,我可以有不同的锁用于不同的目的.示例如下:
class Test {
private Integer x = 0;
private Integer y = 0;
public void incrementX() {
synchronized(x) {
x++;
}
}
public void decrementX() {
synchronized(x) {
x++;
}
}
public void incrementY() {
synchronized(y) {
y++;
}
}
public void decrementY() {
synchronized(y) {
y++;
}
}
Run Code Online (Sandbox Code Playgroud)
或者我应该为每个想要锁定的私人会员拥有一个锁定对象?例:
class Test {
private final Object xLock = new Object();
private final Object yLock = new Object();
private Integer x = 0;
private Integer y = 0;
...
} …Run Code Online (Sandbox Code Playgroud) 前几天我问了一个类似的问题,但对回复不满意,主要是因为我提供的代码有一些人们关注的问题.
基本上,在Java中锁定私有成员的最佳做法是什么?假设每个私有字段只能单独操作而不能一起操作(比如下面我的Test类示例),你应该直接锁定每个私有字段(例1),还是应该使用每个私有字段的一般锁定对象来锁定(例2)?
示例1:直接锁定私有字段
class Test {
private final List<Object> xList = new ArrayList<Object>();
private final List<Object> yList = new ArrayList<Object>();
/* xList methods */
public void addToX(Object o) {
synchronized(xList) {
xList.add(o);
}
}
public void removeFromX(Object o) {
synchronized(xList) {
xList.remove(o);
}
}
/* yList methods */
public void addToY(Object o) {
synchronized(yList) {
yList.add(o);
}
}
public void removeFromY(Object o) {
synchronized(yList) {
yList.remove(o);
}
}
}
Run Code Online (Sandbox Code Playgroud)
示例2:每个私有字段使用锁定对象
class Test {
private final Object xLock = …Run Code Online (Sandbox Code Playgroud) 我有一些代码如下:
var f = function() {...};
$(window).resize(f);
f();
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我希望f每次调整窗口大小时f都会调用它,并且在将其设置为resize事件处理程序之后也要调用一次.
有什么方法可以让这段代码更短/更简洁吗?理想情况下,我想消除f变量的需要,只是让它成为一个匿名函数(即$(window).resize(function() {...}),但我需要一些方法来调用函数一次...
如何在three.js中获取Object3D的世界轮换?我知道如何从中获取Object3D的世界位置object.matrixWorld,但是如何获得对象的世界旋转?
我需要这个以解决以下问题:我有一个像这样的分层对象结构:
var obj1 = new THREE.Object3D();
obj1.x = 200;
obj1.rotation.x = 0.1;
scene.add(obj1);
var obj2 = new THREE.Object3D();
obj2.y = -400;
obj2.rotation.y = 0.21;
obj1.add(obj2);
var obj3 = new THREE.Object3D();
obj3.z = -200;
obj3.rotation.x = 0.1;
obj3.rotation.y = -0.1;
obj2.add(obj3);
Run Code Online (Sandbox Code Playgroud)
现在我想让我的相机在一定距离内正确地观察obj3.当我的对象不旋转时,其工作方式如下:
var relativeCameraOffset = new THREE.Vector3(0, 0, 500); // 500 is z-distance from my object
var cameraOffset = relativeCameraOffset.applyMatrix4(obj3.matrixWorld);
camera.position = cameraOffset;
Run Code Online (Sandbox Code Playgroud)
当我的最后一个孩子被旋转时,我得到了我想要的东西,当我添加这一行
camera.rotation = obj3.rotation;
Run Code Online (Sandbox Code Playgroud)
但是当旋转所有父元素时,这不起作用.所以我正在寻找一种方法让我的3D对象的世界"方向".谢谢.
考虑以下两个文件:
config.json
{
"vendorFiles": [
"vendor/angular/angular.js",
"vendor/angular-ui-router/release/angular-ui-router.js",
"vendor/angular-ui-utils/modules/utils.js"
]
}
Run Code Online (Sandbox Code Playgroud)
gulpfile.js
var gulp = require("gulp"),
concat = require("gulp-concat"),
config = require("./config");
gulp.task("build-vendor", function() {
gulp.src(config.vendorFiles)
.pipe(concat("vendor.js"))
.pipe(gulp.dest("build"));
});
Run Code Online (Sandbox Code Playgroud)
如何消除vendor/为config.json中的每个文件指定的需要?该文件是由其他开发人员手动编辑的文件,因此我希望尽可能轻松地对其进行编辑.
理想情况下,我希望我的gulpfile.js负责添加该前缀(不知何故),并且我的config.json看起来像这样:
{
"vendorFiles": [
"angular/angular.js",
"angular-ui-router/release/angular-ui-router.js",
"angular-ui-utils/modules/utils.js"
]
}
Run Code Online (Sandbox Code Playgroud) 说我有以下网址:
如何创建一个匹配任何以上面的url段开头的 url的正则表达式?
例如:
http://example.com/api/auth(应该匹配)
http://example.com/api/orders(应该匹配)
http://example.com/api/products(应该匹配)
http://example.com/auth(不应该匹配)
http://examples.com/api/auth(不应该匹配)
https://example.com/api/auth(不应该匹配)
是的,显然我可以打电话string.indexOf(url) == 0来做一个"开始"检查,但我特别需要一个正则表达式,因为我必须提供一个到第三方库.
我有一个枚举来描述“字段”,以及每个字段到类型的映射:
enum Field {
Id,
Position,
Name,
Enabled,
}
interface FieldTypes extends Record<Field, any> {
[Field.Id]: number;
[Field.Position]: number;
[Field.Name]: string;
[Field.Enabled]: boolean;
}
Run Code Online (Sandbox Code Playgroud)
我编写了一个函数来从某些字段中提取给定的字段data(我在这里将其定义为unknown类型,因为它对于这个问题并不重要):
declare function getField<F extends Field>(
data: unknown,
field: F
): FieldTypes[F];
const position: number = getField({}, Field.Position);
const name: string = getField({}, Field.Name);
Run Code Online (Sandbox Code Playgroud)
这编译没有错误。getField确实返回一个numberforposition和一个stringfor name。
现在我想编写一个按顺序getFields提取多个字段的函数data,但我很难定义它。我期望它的工作方式如下:
const fields: [boolean, number, number] = getFields({}, [
Field.Enabled,
Field.Id, …Run Code Online (Sandbox Code Playgroud) javascript ×4
java ×3
concurrency ×2
locking ×2
android ×1
atomic ×1
class ×1
contains ×1
deadlock ×1
dpi ×1
glob ×1
gulp ×1
jquery ×1
json ×1
jvm ×1
nested ×1
nested-class ×1
node.js ×1
optimization ×1
performance ×1
pixels ×1
position ×1
python ×1
regex ×1
resolution ×1
rotation ×1
scope ×1
startswith ×1
string ×1
synchronized ×1
three.js ×1
typescript ×1