2011-11-21 47 views
3

我是Java新手,想了解更多。我有一个目前的问题,我想要一个答案,但我也想知道这个技术是什么,以便我可以做一些进一步的阅读。Java术语

我现在有一个服务方法我有(忽略了(我不能工作,如何让<留在这)

public Class < ? extends BasicActivityExtension> getExtensionByActivity(BasicActivity  activity, 
     ExtensionTypes type) throws Exception { 
.... 
} 

像这样

public class BasicActivityExtension 
{ 
public Boolean basicExtensionMethod(){} 
...} 

pubic class MyExtension extends BasicActivityExtension 
{public Boolean myExtensionMethod(){}...} 

然后我的问题是为什么这会给出错误,这个技术的名称是什么(当正确完成时!)

MyExtension members = (MyExtension) activityService.getExtensionByActivity(activity,   ExtensionTypes.member); 

错误是 无法从Class转换为MyExtension;如果我有一个对象类<?扩展BasicActivityExtension>我怎么才能调用BasicActivityExtension中的泛型方法而不关心它是什么类?

干杯,

罗布

+0

“BasicActivityExtension”和“basicExtension”之间的关系不清楚。你能澄清吗?另外,诸如'basicExtension'的类名应该是大写的。 – beny23

回答

3

看样子你想

<T extends BasicActivityExtension> 
public T getExtensionByActivity(BasicActivity activity, ExtensionTypes type) { 
.... 
} 

当您指定Class它必须是一个类的对象,而不是一个类的实例。

顺便说一句:我会避免盲目投掷Exception有更好的方法来处理检查的异常。

+0

+1为检查异常点:) – mprabhat

+1

完美的工作谢谢你:) – Rob

1

你在做什么叫做铸造

由于您正在从方法getExtensionByActivity返回类型为Class的对象,因此出现问题。但是,您正试图将其转换为类型为MyExtension的对象。您将通过将getExtensionByActivity的返回类型从Class更改为MyExtension来解决此问题。

+0

干杯,这对我看到错误的地方非常有用 - 一个班级和一个对象是如此不同,但我让他们混在一起,欢呼。 – Rob

1

欢迎来到Java世界,启动Java 1.5泛型(类似于C++模板)是在Java中引入的。你可以阅读更多关于泛型here

在给定的代码中,不清楚basicExtenstionMyExtenstionActivity之间的关系。

为了调用BasicExtenstionActivity你必须遵循所谓为Program to an interface模式方法,

您的代码应该是这个样子

public Class<T extends BasicExtensionActivity> getBasicExtensionActivity(...) throws Exception. 

希望这有助于。

+0

感谢您的额外阅读,已经用它来了解更多,并学习如何做设置干杯, – Rob