public class GenericMethod { public static void main(String[] args) { Imessage_msg = (Imessage) Factory.getInstance("messageIMpl",Factory.class); msg.send("www.mldn.cn"); } }
interface Imessage { public void send(String str); }
class MessageIMpl implements Imessage { public void send(String str) { System.out.println("消息发送:" + str); } }
class Factory { public static T getInstance(String className,T t) { if ("messageIMpl".equalsIgnoreCase(className)) { return new MessageIMpl(); } return null; } }
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
从给出的代码片段来看,您似乎想要通过工厂模式创建一个实现了Imessage
接口的对象,并调用其send
方法发送消息。不过,您的代码存在一些问题和不完整的部分,我将根据您的代码提供修正后的版本并解释关键点。
public class GenericMethod {
public static void main(String[] args) {
Imessage msg = Factory.getInstance("messageIMpl", Imessage.class);
msg.send("www.mldn.cn");
}
}
interface Imessage {
void send(String str);
}
class MessageIMpl implements Imessage {
@Override
public void send(String str) {
System.out.println("消息发送:" + str);
}
}
class Factory {
public static <T> T getInstance(String className, Class<T> clazz) {
if ("messageIMpl".equalsIgnoreCase(className)) {
return clazz.cast(new MessageIMpl());
}
return null;
}
}
泛型方法修正:在Factory
类中的getInstance
方法中,您需要指定泛型类型T
,并且在方法参数中使用Class<T>
来确保类型安全地创建对象。这样修改后,您可以传入接口Imessage.class
作为类型参数,使得编译器能够正确检查类型转换。
接口实现修正:在MessageIMpl
类中,我添加了@Override
注解以明确该方法是实现接口Imessage
中的抽象方法。这虽然不是必须的,但能增强代码的可读性。
类型转换:在Factory
类的getInstance
方法内,使用clazz.cast()
进行类型转换,这是泛型方法中安全的类型转换方式。
调用修正:在GenericMethod
的main
方法里,调用Factory.getInstance
时,第二个参数应为接口类型Imessage.class
,以匹配泛型方法的定义。
通过上述修正,您的代码应该可以正常编译运行,并且遵循了Java的泛型原则,提高了代码的安全性和可维护性。