设计模式的名称是什么.简单的例子
public interface SomeObject{
public void call();
}
public UnknownDesignPatternImpl implements SomeObject(
List<SomeObject> objects;
public UnknownDesignPatternImpl(List<SomeObject> objs){
objects = obj
}
public void call(){
for (SomeObject obj: objects){
obj.call();
}
}
}
Run Code Online (Sandbox Code Playgroud)
它实现了相同的接口,但委托调用接口对象List
我只是想使用描述符模式,但它似乎没有那么好用.这是一个简短的例子(没有任何实际用途,只是为了展示):
class Num(object):
def__init__(self, val=0):
self.val = val
def __get__(self, instance, owner):
return self.val
def __set__(self, instance, val):
self.val = val
def __str__(self):
return "Num(%s)" % self.val
def __repr__(self):
return self.__str__()
class Test(object):
def __init__(self, num=Num()):
self.num = num
Run Code Online (Sandbox Code Playgroud)
和测试:
>>>t = Test()
>>>t.num # OK
Num(0)
>>>t.num + 3 #OK i know how to fix that, but I thought __get__.(t.num, t, Test) will be called
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand …Run Code Online (Sandbox Code Playgroud) 我有一个App,它使用ActicityGroup来拥有一堆Activity.如果我开始一个新的Activity,我这样做我的ActivityGroup的Child.让我们假设我在我的开始活动(1),我开始一个新的(2),所以这里是被调用的:
(1):onPause()
(2):onCreate(),onStart(),onResume()
直到这里,一切都如预期的那样.如果按下我的BackButton,堆栈如下:
(2):onPause(),onStop(),onDestroy()
(1):onStop(),onDestroy()[sic]
(1):onCreate(),onStart(),onResume()
我没有理由,首先为什么(1)应该执行onStop,而onDestroy()再次重新创建,以及为什么onRestart永远不会被调用(1).
有没有人有这种行为的理由?我可以以某种方式'取消'对onStop()或onDestroy()的调用吗?任何想法apreciated
public static void save()
{
BufferedWriter out = null;
try
{
out = new BufferedWriter(new OutputStreamWriter(Gdx.files.external(file).write(false)));
out.write(Double.toString(FinanceSystem.currentPlayerCash));
out.write("\n");
out.write(Integer.toString(DateSystem.day));
out.write("\n");
out.write(Integer.toString(DateSystem.month));
out.write("\n");
out.write(Integer.toString(DateSystem.year));
out.write("\n");
for(int i = 0; i <= InventorySystem.drugsOwned.size(); i++)
out.write(Integer.toString(InventorySystem.drugsOwned.get(i))+"\n");
for(int i = 0; i <= AttributeSystem.attributeNames.length; i++)
out.write(Integer.toString(AttributeSystem.attributeValues.get(i)) + "\n");
}
catch (Throwable e) {}
finally
{
try
{
if (out != null)
out.close();
}
catch (IOException e) {}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,在库存系统的for循环之后,没有其他东西被写入文件.所以在这个例子中,AttributeSystem.attributeValues没有写入.我也尝试过在这个循环之后编写其他东西,包括非循环的东西,他们也没有写.Whagwaan?
我目前正在尝试替换我的'Sensor.TYPE_ORIENTATION',因为它已被弃用.所以Android文档缺少大部分信息,关于如何做到这一点.虽然调试和陷在这里SO我想通了,如何计算azimuth其曾经被OrientationSensor提供.我是这样做的:
float accelerometerVals[] = new float[3];
float magneticVals[] = new float[3];
float orientationSensorVals[] = new float[3];
float rotationMatrix[] = new float[16];
float orientation[] = new float[3];
@Override
public void onSensorChanged(SensorEvent event) {
switch (event.sensor.getType()) {
case Sensor.TYPE_ACCELEROMETER:
System.arraycopy(event.values, 0, accelerometerVals, 0, 3);
break;
case Sensor.TYPE_MAGNETIC_FIELD:
System.arraycopy(event.values, 0, magneticVals, 0, 3);
break;
case Sensor.TYPE_ORIENTATION:
System.arraycopy(event.values, 0, orientationSensorVals, 0, 3);
break;
default:
break;
}
if (null != magneticVals && null != accelerometerVals){
SensorManager.getRotationMatrix(rotationMatrix, null, accelerometerVals, magneticVals) …Run Code Online (Sandbox Code Playgroud) 在较新版本的Android中(我猜自4.2以来)有一个名为"硬件支持"和"仅软件"的选项.谷歌认为:
Android现在还支持KeyChain凭据的硬件支持存储,通过使密钥不可用于提取来提供更高的安全性.也就是说,一旦密钥位于硬件支持的密钥存储区 (Secure Element,TPM或TrustZone)中,它们就可用于加密操作,但无法导出私钥材料.甚至OS内核也无法访问此密钥材料.虽然并非所有Android驱动的设备都支持硬件存储,但您可以在运行时检查硬件支持的存储是否可用
ephasis是我的
我无法理解的是:GalaxyNexus以及Nexus 7都有一个带有安全元素的NFC芯片,但它的存储类型只是"软件".Nexus 4具有NFC安全元件,并且是"硬件支持",而Nexus 7(2013)和Nexus 5没有NFC安全元件,但仍然是"硬件支持".我可以在Settings-App中手动检查,但有没有办法在我的应用程序中检查这个?
正如CommonsWare所提到的,我应该提供链接:这里提到了 Secure Element与存储类型相关的第一个信息:另一个有用的信息来源是Nelenkov的博客
我有一个脚本,必须输入密码.这适用于大多数密码,除了"好"密码,我得到奇怪的结果.
#! /usr/local/bin/python
from argparse import ArgumentParser
parser = ArgumentParser()
parser.add_argument("-t", "--test")
print(parser.parse_args())
Run Code Online (Sandbox Code Playgroud)
并称之为
./test.py -t test$$test
Run Code Online (Sandbox Code Playgroud)
将打印
Namespace(test='test5365test')
Run Code Online (Sandbox Code Playgroud)
shell将密码视为一个特殊的charakter.
我的问题是,如果有一种方法可以在我的代码中禁用它而不强制用户正确地转义字符?
我必须使用一个定义这样的枚举的库:
public static enum LibVal {
VAL_1,
VAL_2,
VAL_3;
}
Run Code Online (Sandbox Code Playgroud)
我把这个枚举作为一个方法参数:
public void libCallback(LibVal val){
//.... some implementation
}
Run Code Online (Sandbox Code Playgroud)
为什么Java的禁止使用的switch与LibVal内部枚举libCallback的方法?但是,如果lib已将其枚举声明为非静态,则可以使用.这是一个令人困惑的,因为这个SO答案说明,确实没有区别......
编辑:
正如bobkilla所述:我在我的交换机内尝试了LibVal.VAL_1,应该允许.我提供了一个不起作用的代码示例!
class TestClassForEnum {
public static enum TestEnum{ ONE, TWO; }
}
class WhichUsesEnumInsideMethod{
//completely unrelated to TestClassForEnum.TestEnum!!!
public static final int ONE = 0x1282
void doSomethingWithEnum(TestEnum e){
//here I cannot switch:
//FORBIDDEN BY JAVA
switch (e) {
case TestEnum.ONE:
//...
}
//Cannot USE EITHER, because ONE is a static final …Run Code Online (Sandbox Code Playgroud)