我有这样的代码:
public class Something<T extends Thing> {
private T theThing;
public Something(T aThing) {
theThing = aThing;
}
public T getTheThing() {
return theThing;
}
}
然后,在某个地方,我这样写:
Something something = new Something<SpecialThing>(new SpecialThing()); // SpecialThing extends Thing
SpecialThing specialThing = something.getTheThing(); // Error: getTheThing() returns object of type Thing instead of SpecialThing!
为什么我不以theThing
的身份获取SpecialThing
,而是以Thing
的身份获取?
东西类:
public abstract class Thing {
}
特殊事物类:
public class SpecialThing extends Thing {
}
java大神给出的解决方案
原因是您正在使用对Something
的原始类型引用。这意味着Java唯一可以肯定地说的是返回的类型扩展了Thing
,这就是您要获取的类型。
像这样添加类型参数以返回SpecialThing
:
Something<SpecialThing> something = new Something<SpecialThing>(new SpecialThing());
SpecialThing specialThing = something.getTheThing();
java:继承 - java有哪些替代继承的方法? java大神给出的解决方案 有效的Java:偏重于继承而不是继承。 (这实际上也来自“四人帮”)。他提出的理由是,如果扩展类未明确设计为继承,则继承会引起很多不正常的副作用。例如,对super.someMethod()的任何调用都可以引导您通过未知代码的意外路径。取而代之的是,持有对本来应该扩展的类的引用,然后委托给它。这是与Eric…
Java-如何将此字符串转换为日期? - java我从服务器收到此消息,我不明白T和Z的含义,2012-08-24T09:59:59Z将此字符串转换为Date对象的正确SimpleDateFormat模式是什么? java大神给出的解决方案 这是ISO 8601标准。您可以使用SimpleDateFormat simpleFormat = new SimpleDateFormat("yyyy-MM…
查看抽象类的方法是否未被扩展类之一覆盖的方法 - java我有一个抽象类,比如AbstractClass和扩展该抽象类的多个其他类(700多个)。 AbstractClass有一个方法,比方说baseMethod(),它不是抽象方法。许多类(500+)覆盖该方法并具有自己的实现。现在,通过eclipse,我可以很容易地看到通过Ctrl+Shift+G覆盖该方法的方法,但是除了手动以外,还有其他方法可以看到不覆盖该方…
从较小的字节数组(Java)进行长时间转换 - java我正在尝试将字节数组转换为long,但是接收到BufferUnderflowException ByteBuffer buffer = ByteBuffer.allocate(Long.BYTES); byte[] arg1 = new byte[] {0x04, (byte)0xB0}; buffer.put(arg1, 0, arg1.length); …
java.net.URI.create异常 - javajava.net.URI.create("http://adserver.adtech.de/adlink|3.0") 抛出java.net.URISyntaxException: Illegal character in path at index 32: http://adserver.adtech.de/adlink|3.0 虽然n…