我被告知Java中的Marker接口是一个空接口,用于向编译器或JVM发出信号,表明必须以特殊方式处理实现此接口的类的对象,如序列化,克隆等.
但最近我了解到它实际上与编译器或JVM无关.例如,在的情况下,Serializable接口的方法writeObject(Object)的ObjectOutputStream不喜欢的东西instanceOf Serializable,以检测类实现是否Serializable与抛出NotSerializableException相应.一切都在代码中处理,这似乎是一个设计模式,所以我认为我们可以定义自己的标记接口.
现在我怀疑了:
上面提到的标记接口的定义在第一点是错误的吗?那么我们如何定义Marker接口呢?
而不是使用instanceOf运算符为什么不能使方法类似于writeObject(Serializable)有一个编译时类型检查而不是运行时?
注释如何比标记接口更好?
我正在研究Android应用程序的全球化.我必须提供从应用程序中选择不同区域设置的选项.我在我的活动(HomeActivity)中使用以下代码,其中我提供了更改语言环境的选项
Configuration config = new Configuration();
config.locale = selectedLocale; // set accordingly
// eg. if Hindi then selectedLocale = new Locale("hi");
Locale.setDefault(selectedLocale); // has no effect
Resources res = getApplicationContext().getResources();
res.updateConfiguration(config, res.getDisplayMetrics());
Run Code Online (Sandbox Code Playgroud)
只要没有像屏幕旋转那样的配置更改,其中locale默认为android系统级别语言环境而不是代码设置的语言环境,这样就可以正常工作.
Locale.setDefault(selectedLocale);
Run Code Online (Sandbox Code Playgroud)
我能想到的一个解决方案是使用SharedPreferences持久保存用户选择的语言环境,并且在每个活动的onCreate()方法中将语言环境设置为持久语言环境,因为onCreate()会在每次配置更改时反复调用.有没有更好的方法来做到这一点,所以我不必在每个活动中都这样做.
基本上我想要的是 - 一旦我在我的HomeActivity中更改/设置为某个区域设置,我希望我的应用程序中的所有活动都使用该区域设置本身而不管任何配置更改....除非并且直到将其更改为其他区域设置应用程序的HomeActivity提供更改区域设置的选项.
我可以从我的应用程序切换到印地语语言环境,即从值 - hi获取印地语的相应资源...但是当我按照Kannada(values-kn)这样的语言时,语言环境会被切换但显示为空白对于卡纳达语中的每一个文本.如何添加对印度语区域语言(如卡纳达语,泰米尔语等)的支持.我希望它与印地语一样,即从适当的值-xx文件夹中选择资源.我通过Google搜索,其中大部分都建议拥有资产中的字体(.ttf)文件以及每个TextView,Button等等都使用setTypeFace设置它...但这会更复杂..因为我在"活动标题","进度"对话框中的每个地方都使用了特定于语言环境的文本,等等......甚至大多数小部件都是动态创建的.
我的最低Android SDK目标版本是4.0 ...所以我真的不在乎它是否适用于Android版本<4.到目前为止,我已经在模拟器上对它进行了测试.所以不知道它对于真实设备是否也是一样的..
编辑:我已经在运行Android 4.4.2的Nexus 7上测试了应用程序,它确实显示了卡纳达语,泰米尔语,泰卢固语...大多数印度语言的文本.必须测试其他设备或更低版本(v4.0-4.3)
我正在使用 RollingFile 附加程序。我希望日志文件每 20 分钟滚动一次,无论日志记录事件如何。例如,在一小时内我应该有 3 个日志文件,即使在那一小时内可能没有任何日志记录。使用 Log4j2 可以吗?如果是,请提供所需的配置(在 log4j2.xml 中)。以下配置似乎不起作用:
<RollingFile name="RECHARGE_NMCD" fileName="D:/rc_nmcd/rc_nmcd.log" append="true" bufferedIO="false" filePattern="D:/rc_nmcd/rc_nmcd_%d{yyyy-MM-dd-HH-mm}.process">
<PatternLayout>
<Pattern>%m%n</Pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy interval="20"/>
</Policies>
<DefaultRolloverStrategy max="20" />
</RollingFile>
Run Code Online (Sandbox Code Playgroud) 我已将我的log4j2自定义插件打包到一个单独的jar(仅包含插件类)中,并将其放在应用程序类路径中.但它没有被发现.
我用谷歌搜索发现它是一个错误 - 不再使用"packages"参数.还有一些链接提供了一些替代方案,其中maven pom.xml和log4j2插件dat文件在上下文中.问题是我不熟悉maven,也不知道如何生成dat文件.我只知道它包含在log4j-2.1-core.jar中,其中现有的log4j2插件在pom.xml中定义.
有人可以建议我如何使我的自定义插件工作?
我经历了这个 - Log4j2自定义插件 - 使用Maven Assembly Plugin进行注释处理
但目前尚不清楚.我正在关注解决方案但不确定如何为自定义插件创建插件dat文件或者我需要在哪里进行更改...
我有一张桌子:
Parent Child Educated
'P1', 'C1', 'YES'
'P1', 'C2', 'YES'
'P1', 'C3', 'NO'
'P2', 'C11', 'YES'
'P2', 'C12', 'NO'
'P3', 'C21', 'YES'
'P3', 'C22', 'YES'
'P4', 'C31', 'NO'
'P4', 'C32', 'NO'
Run Code Online (Sandbox Code Playgroud)
现在,我需要找到所有孩子都接受过教育的父母,即 Educated='YES'。
就像在上面的情况下父'P3'
任何人都可以提出一个查询来获取这个
我在MainActivity类中声明了一个静态成员,如下所示:
public class MainActivity extends Activity {
public static int logNum = 0;
...
}
Run Code Online (Sandbox Code Playgroud)
我在其他方法中递增此变量值.
奇怪的是,当我关闭这个应用程序并再次运行时,该值不会初始化为零,而是从最后一个递增的值开始.
我在Eclipse模拟器上运行它.这个模拟器有问题吗?
我不想要解决方案.我可以在onCreate()方法中将变量初始化为零.只是想知道为什么?
而且我没有点击主页按钮而是单击后退按钮并且也onDestroy()正在调用.
public static String FILL_IN_THE_BLANK_REGEX = "\\\\[blank_.+\\\\]";
public static int getBlankCountForFillInTheBlank(String questionText) {
Matcher m = Pattern.compile(FILL_IN_THE_BLANK_REGEX).matcher(questionText);
int count = 0;
while (m.find()) ++count;
return count;
}
public static void main(String[] args) {
System.out.println(getBlankCountForFillInTheBlank("abc [blank_tag1] abc [blank_tag2]")); // prints 1
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我做了类似的事情
public static String FILL_IN_THE_BLANK_REGEX = "\\\\[blank_tag.\\\\]";
Run Code Online (Sandbox Code Playgroud)
它打印2是正确的.
'+'在这里不起作用我不知道为什么.
(空白标签可以是[blank_someusertag])
我是 Ansible 的新手,必须更新现有的剧本任务。最初,有 2 个任务可以将 yml 变量值复制到文件 - 这在每个证书和密钥值的循环中运行。我想如果复制任务没有改变 - 基本上如果内容相同,文件没有被覆盖,那么剧本中的剩余任务不应该被执行。
- name: Copy cert files
copy:
content: "{{item.value}}"
dest: /home/copyTest/dest/{{item.key}}.crt
owner: test
group: test
mode: 0644
with_dict: '{{certs_dict}}'
- name: Copy key files
copy:
content: "{{item.value}}"
dest: /home/copyTest/dest/{{item.key}}.key
owner: test
group: test
mode: 0644
with_dict: "{{keys_dict}}"
- name: Stop server
...
...
Run Code Online (Sandbox Code Playgroud)
如果这两个复制任务的结果都没有改变,即证书和密钥文件都没有改变,则不应执行进一步的任务(停止服务器、启动服务器等)。
我有一个桌面应用程序使用netbeans IDE我要更改默认标题图像我使用了ImageIcon对象和 imageobject.getImage();
下面是代码片段
IconImage img = new ImageIcon("\GNSSRegistry\src\my\gnssregsitry\NSSIcon\logobig.jpg");
Run Code Online (Sandbox Code Playgroud)
然后我在netbeans IDE提供的jframe,s图标属性窗口中设置以下代码
jframe.setIconImage(img.getImage());
Run Code Online (Sandbox Code Playgroud)
但netbeans抱怨图像路径中有一个非法的转义字符,如果我感到困惑,我希望我没有让路径设置错误.
请帮忙