是否有可靠的方法来锁定所有Android设备上的屏幕方向?以下代码适用于我的Nexus S和其他手机,但出于某种原因,ROTATION_90对应于Xoom上的SCREEN_ORIENTATION_REVERSE_PORTRAIT.
有没有办法可靠地将旋转映射到方向?
private void lockScreenOrientation() {
if (!mScreenOrientationLocked) {
final int orientation = getResources().getConfiguration().orientation;
final int rotation = getWindowManager().getDefaultDisplay().getOrientation();
if (rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_90) {
if (orientation == Configuration.ORIENTATION_PORTRAIT) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
else if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
}
else if (rotation == Surface.ROTATION_180 || rotation == Surface.ROTATION_270) {
if (orientation == Configuration.ORIENTATION_PORTRAIT) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT);
}
else if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
}
}
mScreenOrientationLocked = true;
}
}
private void unlockScreenOrientation() { …Run Code Online (Sandbox Code Playgroud) 是否有比这更好的方法来从AnnotationMirror获取元素注释?在我看来,这真的很hack。
for (AnnotationMirror annotationMirror : element.getAnnotationMirrors()) {
try {
Class annotationClass = Class.forName(annotationMirror.getAnnotationType().toString());
Annotation annotation = element.getAnnotation(annotationClass);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud) 我在Kotlin中有一个方法,它返回一个通用列表的Rx Observable:
public fun getObservable(): Observable<List<FooBar>> {
return Observable.just(theList)
}
Run Code Online (Sandbox Code Playgroud)
因为Kotlin list trait被定义为List<out T>,所以Java会将返回类型视为Observable<List<? extends FooBar>>.
有没有办法告诉Kotlin编译器Java应该看到这个Observable<List<FooBar>>?
http://kotlinlang.org/docs/reference/generics.html
已更新以正确显示问题.
我有以下函数来访问属性的委托.它使用Kotlin反射来获取属性的名称和Java反射以获得该字段.
fun Any.getDelegate<T>(prop: KProperty<T>): Any {
return javaClass.getDeclaredField("${prop.name}\$delegate").let {
it.setAccessible(true)
it.get(this)
}
}
Run Code Online (Sandbox Code Playgroud)
该方法使用如下:
val delegate = a.getDelegate(A::b)
Run Code Online (Sandbox Code Playgroud)
但是,我更喜欢这样使用它:
val delegate = a.b.delegate
Run Code Online (Sandbox Code Playgroud)
上面代码的问题是获取属性名称a.b并a从中获取实例a.b.根据我对Kotlin的了解,这可能是不可能的,但是我想看看我是否可以清理我的功能.
为了更好地了解我正在尝试做的事情,这是我的完整代码.我想要一个可观察的委托,我可以使用委托引用添加和删除观察者,而不创建附加变量.
fun Any.addObservable<T>(prop: KProperty<T>, observer: (T) -> Unit) {
getObservableProperty(prop).observers.add(observer)
}
fun Any.getObservableProperty<T>(prop: KProperty<T>): ObservableProperty<T> {
return getDelegate(prop) as ObservableProperty<T>
}
fun Any.getDelegate<T>(prop: KProperty<T>): Any {
return javaClass.getDeclaredField("${prop.name}\$delegate").let {
it.setAccessible(true)
it.get(this)
}
}
class ObservableProperty<T>(
initialValue: T,
initialObservers: Array<(T) -> Unit> = emptyArray()) : ReadWriteProperty<Any?, T> {
private var value …Run Code Online (Sandbox Code Playgroud) 我有一个n大小的Rects集合,其中大部分相互交叉.我想删除交叉点并将相交的Rects缩小为较小的非交叉rects.
我可以很容易地强制解决方案,但我正在寻找一种有效的算法.
这是一个可视化:
原版的:

处理:

理想情况下,方法签名看起来像这样:
public static List<RectF> resolveIntersection(List<RectF> rects);
Run Code Online (Sandbox Code Playgroud)
输出将大于或等于输入,其中输出解析上述视觉表示.
我有以下类和接口:
public interface ActivityComponent<T extends Activity> {
void inject(T activity);
}
public interface MyActivityComponent extends ActivityComponent<MyActivity> {
}
public abstract class DaggerActivity extends Activity {
abstract ActivityComponent getComponent(Context context);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityComponent component = getComponent(this);
}
}
public class MyActivity extends DaggerActivity {
@Override
ActivityComponent getComponent(Context context) {
MyActivityComponent component = buildComponent();
return component;
}
Run Code Online (Sandbox Code Playgroud)
这个类似的(我认为?)Kotlin代码:
public trait ActivityComponent<T : Activity> {
public fun inject(activity: T)
}
public abstract class DaggerActivity : Activity {
protected …Run Code Online (Sandbox Code Playgroud) 也许我误解copy了data类的功能是如何工作的,或者可能存在错误,但以下是copy函数不能按预期工作的示例:
科特林:
data class A {
public var x: String? = null
public var y: String? = null
public var z: B = B.ONE
}
enum class B {
ONE
TWO
THREE
}
Run Code Online (Sandbox Code Playgroud)
Java的
A a1 = new A()
a1.setX("Hello")
a1.setY("World")
a1.setZ(B.TWO)
A a2 = a1.copy()
// a2.x is null
// a2.y is null
// a2.z is B.ONE
Run Code Online (Sandbox Code Playgroud)
它似乎copy只是创建一个新的实例A而不是复制值.如果我将变量放在构造函数中,则会分配值,但这与构造新实例没有什么不同.
有没有办法让Java类了解其实例化器?例如:
public class Foo() {
public Foo() {
// can I get Bar.myInteger from here somehow
// without passing it in to the constructor?
}
}
public class Bar {
private int myInteger;
public Bar() {
myInteger = 0;
Foo foo = new Foo();
}
}
Run Code Online (Sandbox Code Playgroud) 以下在Java中对我不起作用.Eclipse抱怨说没有这样的构造函数.我已经将构造函数添加到子类中以解决它,但还有另一种方法可以做我正在尝试做的事情吗?
public abstract class Foo {
String mText;
public Foo(String text) {
mText = text;
}
}
public class Bar extends Foo {
}
Foo foo = new Foo("foo");
Run Code Online (Sandbox Code Playgroud) 我尝试了一些东西,但我画了一个空白.这是我的查询:
SELECT *
FROM Companies
WHERE
Symbol LIKE 'ZY%' OR
Name LIKE '%ZY%'
ORDER BY Symbol ASC
LIMIT 2;
Run Code Online (Sandbox Code Playgroud)
基本上我想要"ZY"匹配(ZNGA,Zynga Inc)才能匹配(HALO,Halozyme Therapeuti ......).
显然,订单的原因是这部分查询:
ORDER BY Symbol
Run Code Online (Sandbox Code Playgroud)
我错过了一些明显的东西吗?
java ×6
kotlin ×4
constructor ×2
generics ×2
abstract ×1
algorithm ×1
android ×1
annotations ×1
class ×1
data-class ×1
delegation ×1
interop ×1
intersection ×1
locking ×1
match ×1
orientation ×1
orthogonal ×1
polygon ×1
rect ×1
reflection ×1
rotation ×1
screen ×1
sql ×1
where ×1