考虑这个例子:
import java.lang.reflect.Field;
public class Test {
public static void main(String[] args) {
C c = new C();
try {
Field f = C.class.getDeclaredField("a");
f.setAccessible(true);
Integer i = (Integer)f.get(c);
System.out.println(i);
} catch (Exception e) {}
}
}
class C {
private Integer a =6;
}
Run Code Online (Sandbox Code Playgroud)
允许您通过反射访问类的私有字段似乎不合逻辑.为什么有这样的功能?允许这种访问不是"危险的"吗?
我目前正在与具有XML Schema工作<xsd:annotation>/ <xsd:documentation>对大多数类型和元素.当我从这个XML Schema生成Java Bean时,那些Beans的Javadoc只包含一些关于类型/元素的允许内容的通用生成信息.
我希望<xsd:documentation>在相关位置看到标记的内容(例如,对于ComplextType,该标记的内容应该显示在生成的类的Javadoc中以表示该complexType).
有没有办法实现这个目标?
编辑:此XML Schema将在带有JAX-WS的WSDL中使用,因此该标记也可能是合适的.
编辑2:我读过<jxb:javadoc>.根据我的理解,我可以在单独的JAXB绑定文件中或直接在XML Schema中指定.这几乎可以解决我的问题.但我宁愿使用现有的<xsd:documentation>标签,因为Javadoc不是文档的主要目标(主要是关于数据结构的信息,而不是关于从它生成的Java Bean),并允许非JAXB工具访问信息.好.提供两者的文档<jxb:javadoc>并xsd:documentation>"感觉"错误,因为我没有充分理由重复数据(和工作).
编辑3:多亏了帕斯卡的答案,我意识到,我已经有半个解决方案:<xsd:documentation>的complexTypes的写入它的Javadoc的开始!问题仍然是只有该complexTypeS用于和simpleTypeS(这也可导致在一个类)和元素仍然Javadoc的更小.
我尝试将一个对象强制转换为我的Action类,但它会产生一个警告:
Type safety: Unchecked cast from Object to Action<ClientInterface>
Action<ClientInterface> action = null;
try {
Object o = c.newInstance();
if (o instanceof Action<?>) {
action = (Action<ClientInterface>) o;
} else {
// TODO 2 Auto-generated catch block
throw new InstantiationException();
}
[...]
Run Code Online (Sandbox Code Playgroud)
感谢您的任何帮助
如果有更多对象分配请求进入之前有机会运行GC,JVM是否可以在不重启的情况下从OutOfMemoryError中恢复?
各个JVM实现在这方面有所不同吗?
我的问题是关于JVM恢复而不是用户程序试图通过捕获错误来恢复.换句话说,如果在应用程序服务器(jboss/websphere/..)中抛出OOME,我是否必须重新启动它?或者,如果进一步的请求似乎没有问题,我可以让它运行.
简短的问题,
我在一些旧代码中看到a ByteArrayInputStream创建如下:
new BufferedReader(new InputStreamReader(new ByteArrayInputStream(somebytes)));
Run Code Online (Sandbox Code Playgroud)
然后BufferedReader用来somebytes逐行读出.
一切正常,但我注意到它BufferedReader永远不会关闭.
这一切都在长时间运行的websphere应用程序中运行,somebytes并不是很糟糕(最多200k),它每周只调用几次而且我们没有遇到任何明显的内存泄漏.所以我希望所有对象都能成功地进行垃圾回收.
我总是(曾经)在一个finally声明中了解到需要关闭输入/输出流.ByteStreams这个规则是例外吗?
亲切的问候Jeroen.
当您在子类中重写方法时降低方法的可见性时,为什么编译器会给出错误消息?
为什么Java中的许多Collection类扩展了Abstract类并实现了接口(也是由给定的抽象类实现的)?
例如,类HashSet扩展AbstractSet并实现Set,但AbstractSet已经实现Set.
在我的Java代码中,我经常使用非常方便的method(Class... args)varargs.据我所知,它们允许您传递任意数量的Class对象或数组Class[].由于我也经常使用Java集合类,因此两者之间缺乏兼容性使我感到沮丧.结果,我最终做了collection.toArray(),但这有一些类型安全问题.
所以现在问题是:为什么Java不允许实例Iterable<T>作为vararg参数,只要泛型类型适合T...vararg 的类型?不是每个人都一直使用列表,集等吗?是否有一种简单,类型安全的方式来提供从集合到vararg的转换?
java ×8
collections ×2
c ×1
casting ×1
inputstream ×1
java-7 ×1
javadoc ×1
jax-ws ×1
jaxb ×1
jvm ×1
nio ×1
overriding ×1
polymorphism ×1
reflection ×1
subclassing ×1
type-safety ×1
unchecked ×1
xjc ×1