考虑以下简短的C++程序:
#include <iostream>
class B {
public:
operator bool() const {
return false;
}
};
class B2 : public B {
public:
operator int() {
return 5;
}
};
int main() {
B2 b;
std::cout << std::boolalpha << (bool)b << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
如果我在不同的编译器上编译它,我会得到各种结果.使用Clang 3.4和GCC 4.4.7打印true,而Visual Studio 2013打印false,这意味着它们调用不同的强制转换操作符(bool)b.根据标准,这是正确的行为?
在我的理解operator bool()需要转变,而operator int()将需要int向bool转换,所以编译器应该选择第一个.是否const做一些与该是由编译器认为更"贵"常量转换?
如果我删除了const,所有编译器同样产生false输出.另一方面,如果我将两个类组合在一起(两个运算符将在同一个类中),则所有三个编译器都将生成true输出.
这是我用来测试 log4j 的学生课程。
public class Student{
private static final Logger logger = Logger.getLogger(Student.class.getName());
public Student() {
PropertyConfigurator.configure("log4j.properties");
}
public static void main(String args[]){
logger.log(Level.INFO, "My log4j Test");
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的log4j.properties文件
log4j.rootLogger=INFO,Appender1,Appender2
log4j.appender.Appender1=org.apache.log4j.ConsoleAppender
log4j.appender.Appender2=org.apache.log4j.RollingFileAppender
log4j.appender.Appender2.File=C:/Log4j/MyLogExample.log
log4j.appender.Appender1.layout=org.apache.log4j.PatternLayout`
log4j.appender.Appender1.Target=System.out`
log4j.appender.Appender1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n`
log4j.appender.Appender2.layout=org.apache.log4j.PatternLayout`
log4j.appender.Appender2.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n`
log4j.appender.Appender2.MaxFileSize=50KB`
log4j.appender.Appender2.MaxBackupIndex=10`
Run Code Online (Sandbox Code Playgroud)
当我使用 Eclipse 运行该程序时,会创建MyLogExample.log文件。但是,在我创建 jar 文件并使用命令提示符运行它之后,未创建日志文件。
在控制台中我可以看到这个错误。
log4j:ERROR Could not read configuration file [log4j.properties].
java.io.FileNotFoundException: log4j.properties (The system cannot find the file specified) …Run Code Online (Sandbox Code Playgroud) 如何从字符串中删除多个换行符,以便我只获得一个换行符.例如,我有一个字符串"\r\n\r\n\r\n\r\n\r\n\r\n\r\n",我怎么能把它变成一个'\n'?
我已经尝试了很长一段时间来显示NetLogo中乌龟的当前坐标.我知道要显示其中一个坐标,我可以使用:
show [xcor] of turtle 0
Run Code Online (Sandbox Code Playgroud)
要么
show [ycor] of turtle 0
Run Code Online (Sandbox Code Playgroud)
但是如何显示两个坐标呢?
谢谢.
运行此代码时,它显示Stackoverflow错误.我做错了什么,为什么代码编译?
public class Foo {
int a = 5;
Foo f = new Foo();
void go() {
System.out.println(f.a);
}
public static void main(String[] args) {
Foo f2 = new Foo();
f2.go();
}
}
Run Code Online (Sandbox Code Playgroud) 方案如下:我有一个java包(myapp.config),它包含我所有的JAXB注释类,我想从中生成一个XML模式文件.在包中,还有一个package-info.java文件,它在包元素上包含@XmlSchema注释,因此在整个包中有效:
@XmlSchema(namespace="http://myapp/config",
xmlns = @XmlNs(prefix="myapp", namespaceURI="http://myapp/config"),
elementFormDefault=XmlNsForm.QUALIFIED)
package myapp.config;
Run Code Online (Sandbox Code Playgroud)
当我运行JDK附带的schemagen命令行工具时,
D:\Projects\Myapp>"%JAVA_HOME%/bin/schemagen" -cp "%JAVA_HOME%/lib/tools.jar"
src/myapp/config/*.java
Run Code Online (Sandbox Code Playgroud)
我得到了正确的结果:生成的schema1.xsd文件中的根元素包含targetNamespace和其他必要的属性:
<xs:schema elementFormDefault="qualified" version="1.0"
targetNamespace="http://myapp/config"
xmlns:tns="http://myapp/config"
xmlns:myapp="http://myapp/config">
xmlns:xs="http://www.w3.org/2001/XMLSchema" >
Run Code Online (Sandbox Code Playgroud)
但是,当我想在我的Ant脚本中执行相同的任务时,
<schemagen srcdir="src/myapp/config" destdir="dist">
<include name="*.java"/>
</schemagen>
Run Code Online (Sandbox Code Playgroud)
schemagen工具似乎完全忽略了命名空间注释,因为在生成的schema1.xsd文件中,没有它们的痕迹:
<xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">
Run Code Online (Sandbox Code Playgroud)
当我以详细和调试模式运行schemagen任务时,很明显该工具会加载除package-info.java之外的所有.java文件,这就是为什么它不知道命名空间的原因.
你以前遇到过这种奇怪的行为吗?为什么命令行工具处理包信息文件,而Ant任务不处理?我该怎么做才能使Ant任务工作?
提前谢谢,
buc
我尝试以编程方式在Android中发送DTMF音.但是模拟器会显示一个对话框,上面写着"你想发送这些音吗?" 它只在我点击OK时发送音调.但是,我如何以编程方式克服此对话框?
格拉西亚斯
场景是这样的:
class Graph{
// Now many variables
Node masterUser;
Node masterFilter;
Node masterLocation;
Index indexUser;
Index indexFilter;
Graph() {
// INITIALIZE ALL Variables Here
}
}
// SubClass
class MyClass{
Graph graph = new Graph();
// NOW I Can refer all class members of Graph class here by graph Object
}
Run Code Online (Sandbox Code Playgroud)
现在发生的事情是,当我这样做时,graph.所有成员都将可以访问。
但我想对 Graph 类的变量进行分组,这样
当用户这样做时graph.Index.,只有所有内容都Index可以访问。当用户graph.Nodes.这样做时,只有所有Nodes 都可以访问。
我该怎么做?