我正在寻找GWT的一些GXT代码,我遇到了泛型的这种使用,我在Java教程中找不到另一个例子.com.extjs.gxt.ui.client.data.BaseModelData如果要查看所有代码,则为类名.以下是重要部分:
private RpcMap map;
public <X> X get(String property) {
if (allowNestedValues && NestedModelUtil.isNestedProperty(property)) {
return (X)NestedModelUtil.getNestedValue(this, property);
}
return map == null ? null : (X) map.get(property);
}
Run Code Online (Sandbox Code Playgroud)
X在类中或层次结构中的任何地方都没有定义,当我在eclipse中点击"go to declaration"时,它只会进入<X>公共方法签名.
我试着用以下两个例子调用这个方法来看看会发生什么:
public Date getExpiredate() {
return get("expiredate");
}
public String getSubject() {
return get("subject");
}
Run Code Online (Sandbox Code Playgroud)
他们编译并显示没有错误或警告.我认为至少我必须做一个演员才能让它发挥作用.
这是否意味着Generics允许魔法返回值可以是任何东西,并且会在运行时爆炸?这似乎与泛型应该做的事情相反.任何人都可以向我解释这一点,并可能给我一些链接到一些文档,解释这一点好一点?我已经浏览了Sun关于泛型的23页pdf,并且返回值的每个示例都是在类级别定义的,或者是传入的参数之一.
我想从Java 5升级到Java 6.我们都知道技术优势和好处,但是:
我有一个问题,主要客户拒绝从java 5升级到java 6,因为"风险"和"我们没有/太少的好处"(银行业).
对于客户的非技术性决策者可以回答什么,他将从升级中获得什么好处 - 或者如果他将继续使用Java 5可能会出现哪些问题/后果?
这不是一个"火与忘记"的产品,它通过新的功能/特性进行了扩展 - 开发已经并且将会不断发展 - 开发团队肯定会受益于jdk 6功能/工具.
编辑: Java 5 达到的EOL确实是一个有效点,但它并没有说服客户端,因为他正在使用IBM JRE/JDK 5,这似乎还没有达到它的生命周期.而且,除此之外,客户说:"Java 5运行良好多年,不太可能出现新的,看不见的问题"
在Java 5及更高版本中迭代java.util.Map的所有键/值对的最简单方法是什么?
在我的测试中,我有以下几行:
when(client.runTask(anyString(), anyString(), isA(Iterable.class)).thenReturn(...)
Run Code Online (Sandbox Code Playgroud)
isA(Iterable.class)产生警告,它需要未经检查的转换以符合Iterable<Integer>.这是什么语法?
isA(Iterable<Integer>.class)
isA((Iterable<Integer>)Iterable.class
Run Code Online (Sandbox Code Playgroud)
不工作.
有什么建议?
目前有一种方法可以根据条件禁用TestNG测试
我知道你当前可以在TestNG中禁用测试:
@Test(enabled=false, group={"blah"})
public void testCurrency(){
...
}
Run Code Online (Sandbox Code Playgroud)
我想根据条件禁用相同的测试,但不知道如何.像这样的东西:
@Test(enabled={isUk() ? false : true), group={"blah"})
public void testCurrency(){
...
}
Run Code Online (Sandbox Code Playgroud)
任何人都知道这是否可行.
在Java 5之前,没有注释.因此,您无法向类添加元数据.
要将类标记为可序列化,您必须实现Serializable接口(这只是一个标记)并使用更多transient关键字将字段标记为不可序列化(如果需要),例如:
public class MyClass implements Serializable {
...
private transient Bla field;
...
}
Run Code Online (Sandbox Code Playgroud)
现在你理论上可以使用注释(这对他们来说是完美的用途)并且具有:
@Serializable
public class MyClass {
...
@Transient
private Bla field;
...
}
Run Code Online (Sandbox Code Playgroud)
但是不推荐使用接口和关键字,并且在Java 5中没有添加注释来替换它们.
保留界面和关键字的决定有哪些考虑因素?
当然,存在与Java 5之前的代码兼容的问题,但在某些时候它将结束(例如,与泛型的新功能相关,JLS指定未来版本的Java编程语言可能会禁止使用原始类型).那么为什么不为序列化注释做准备呢?
有什么想法吗?(虽然我更喜欢具体的参考文献:D 我无法找到)
我收到此错误:
java.lang.InternalError: name is too long to represent
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:621)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
at weblogic.utils.classloaders.GenericClassLoader.defineClass(GenericClassLoader.java:338)
at weblogic.utils.classloaders.GenericClassLoader.findLocalClass(GenericClassLoader.java:291)
at weblogic.utils.classloaders.GenericClassLoader.findClass(GenericClassLoader.java:259)
Run Code Online (Sandbox Code Playgroud)
这似乎与某些调试功能有关(实际上删除-Xdebug命令行选项,错误消失).我也在ASF Bugzilla中找到了一些信息.有办法解决这个问题吗?
我能想到的可能的解决方案是更改JVM(使用JRockit应该没有这个问题),但我真的不知道这是否可以解决问题以及是否可以破坏其他问题.
我一遍又一遍地读到Java 5的注释是该语言的"高级功能".直到最近,我没有太多使用注释(除了通常的@Override,&c),但是在许多与Web服务相关的项目上的工作迫使我的手.自从我学习了Java 5之前的Java以来,我从来没有真正花时间坐下来学习注释系统.
我的问题 - 你们真的使用注释吗?他们对你有多大帮助,日常生活?有多少StackOverflow-ers必须编写自定义注释?
我有一个应用程序,它已经在Java 1.5下运行了大约一年.我们刚刚更新了盒子并安装了Java 1.6.
在将应用程序部署到新服务器之后,我们发现应用程序在尝试转换某些XML时会抛出异常.我们无法理解为什么会发生这种情况,直到我们在本地部署并发生同样的情况.将SDK更改为v1.5后问题停止,应用程序运行正常.
这是方法的来源:
import java.io.StringWriter;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
public static String xmlToString(Node node) {
try {
Source source = new DOMSource(node);
StringWriter stringWriter = new StringWriter();
Result result = new StreamResult(stringWriter);
TransformerFactory factory = TransformerFactory.newInstance();
Transformer transformer = factory.newTransformer();
transformer.transform(source, result);
return stringWriter.getBuffer().toString();
} catch (TransformerConfigurationException e) {
e.printStackTrace();
} catch (TransformerException e) {
e.printStackTrace();
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
它正在崩溃"transformer.transform(source,result);" 有异常的行: …
当我遇到这种通用方法时,我感到困惑.
public static <T> T addAndReturn(T element, Collection<T> collection){
collection.add(element);
return element;
}
Run Code Online (Sandbox Code Playgroud)
我不明白为什么<T>这个方法需要.
另外,泛型方法和使用泛型语法的方法有什么区别?