Java通用用法问题
比如说我想做点什么Java通用用法问题,java,generics,Java,Generics,比如说我想做点什么 public class Container<C extends Member> { public void foo() { C newC = new C(); } } 公共类容器{ 公共图书馆{ C newC=新的C(); } } 我意识到这是行不通的,但正确的Java习惯用法是什么?典型的习惯用法是生成传入构造函数的类型标记: public class Container<C extends Member> {
public class Container<C extends Member> {
public void foo() {
C newC = new C();
}
}
公共类容器{
公共图书馆{
C newC=新的C();
}
}
我意识到这是行不通的,但正确的Java习惯用法是什么?典型的习惯用法是生成传入构造函数的类型标记:
public class Container<C extends Member> {
private Class<C> tag;
public Container(Class<C> tag) {
this.tag = tag;
}
public void foo() {
C newC = tag.newInstance();
}
}
公共类容器{
私有类标签;
公共容器(类标签){
this.tag=tag;
}
公共图书馆{
C newC=tag.newInstance();
}
}
典型的习惯用法是生成传入构造函数的类型标记:
public class Container<C extends Member> {
private Class<C> tag;
public Container(Class<C> tag) {
this.tag = tag;
}
public void foo() {
C newC = tag.newInstance();
}
}
公共类容器{
私有类标签;
公共容器(类标签){
this.tag=tag;
}
公共图书馆{
C newC=tag.newInstance();
}
}
泛型类型C在运行时被擦除为java.lang.Object。无法实例化已擦除的泛型类型。看起来你更想要某种工厂创作模式
abstract class MemberFactory {
public static <T> Member create(Class<T> memberClass) throws Exception {
return memberClass.newInstance();
}
}
Member premiumMember = MemberFactory.create(PremiumMember.class);
抽象类成员工厂{
公共静态成员创建(类memberClass)引发异常{
返回memberClass.newInstance();
}
}
成员premiummber=MemberFactory.create(premiummber.class);
如果是这种情况,您可能需要考虑使用依赖项注入和Spring或Guice之类的框架。在运行时将泛型C擦除为java.lang.Object。无法实例化已擦除的泛型类型。看起来你更想要某种工厂创作模式
abstract class MemberFactory {
public static <T> Member create(Class<T> memberClass) throws Exception {
return memberClass.newInstance();
}
}
Member premiumMember = MemberFactory.create(PremiumMember.class);
抽象类成员工厂{
公共静态成员创建(类memberClass)引发异常{
返回memberClass.newInstance();
}
}
成员premiummber=MemberFactory.create(premiummber.class);
如果是这种情况,您可能想看看使用依赖项注入和Spring或Guice之类的框架。我不知道您的示例中给出了什么“this”。你能用不同的方式描述这个问题吗?我不确定我是否理解你举的例子中的“这”是什么。你能用不同的方式描述这个问题吗?