Java泛型类,使用外部类参数的内部类
我有一个外部泛型类,它有一些内部类,我想使用外部类的泛型类型 但是,我不明白如何正确使用泛型参数 例如:Java泛型类,使用外部类参数的内部类,java,generics,Java,Generics,我有一个外部泛型类,它有一些内部类,我想使用外部类的泛型类型 但是,我不明白如何正确使用泛型参数 例如: class Outer<E extends CharSequence>{ class Inner extends ArrayList<E>{ } void func() { ArrayList<CharSequence> al = new ArrayList<CharSequence>(); al.a
class Outer<E extends CharSequence>{
class Inner extends ArrayList<E>{
}
void func() {
ArrayList<CharSequence> al = new ArrayList<CharSequence>();
al.add("abc"); // OK
CharSequence a = al.get(0); // OK
Inner in = new Inner();
in.add("abc"); // Error: The method add(E) in the type ArrayList<E> is not applicable for the arguments (String)
CharSequence b = in.get(0); // OK
}
}
类外部{
类内部扩展ArrayList{
}
void func(){
ArrayList al=新的ArrayList();
al.add(“abc”);//好的
CharSequence a=al.get(0);//确定
内部输入=新内部();
in.add(“abc”);//错误:类型ArrayList中的方法add(E)不适用于参数(字符串)
CharSequence b=in.get(0);//确定
}
}
如何声明内部类以使用外部类的相同泛型类型?
谢谢
编辑+解决方案:
最后我实现了我想要的,下面是示例结果:
abstract class MyGenericClass<E extends CharSequence>{
class TheList extends ArrayList<E>{};
TheList list = new TheList();
}
final class ClassInstance extends MyGenericClass<String>{
};
public class Main{
public static void main(String[] args){
ClassInstance c = new ClassInstance();
c.list.add("abc");
String s = c.list.get(0);
}
}
抽象类MyGenericClass{
类列表扩展了ArrayList{};
列表=新建列表();
}
最终类ClassInstance扩展了MyGenericClass{
};
公共班机{
公共静态void main(字符串[]args){
ClassInstance c=新ClassInstance();
c、 列表。添加(“abc”);
字符串s=c.list.get(0);
}
}
我的要求是要有泛型类,并在其中包含泛型容器,它将使用与其父类相同的类型参数
注意:CharSequence/String是使用的示例参数,我的实际用法不同。这根本不安全 如果我做了一个
外部
,会发生什么情况?您最终将向
数组列表添加字符串
如果您有一个
的集合,那么可以放入该集合中的唯一类型安全的东西就是E
(或扩展E
,或null
)的实例。,这从根本上说是不安全的
如果我做了一个外部
,会发生什么情况?
您最终将向数组列表添加字符串
如果您有一个
的集合,那么可以放入该集合中的唯一类型安全对象是E
(或扩展E
的类,或null
)的实例。类内部扩展ArrayList{
}
类内部扩展ArrayList{
}
如何声明内部类以使用外部类的相同泛型类型
内部
已使用与外部
相同的泛型类型。问题是func
没有使用它,它使用的是CharSequence
As SLaksfunc
在所有情况下都会做一些古怪的事情,除了在外部
上调用时:例如,在外部
上调用时,它会将字符序列
添加到数组列表
现在,如果func
已经具有该具体类型的对象:
void func(E e)
{
Inner in = new Inner();
in.add(e);
}
这样做是对的。因此编译器允许这样做
你似乎试图从你所面临的某个特定问题中创建一个通用问题。如果您描述了您正在尝试做的事情,并且失败了,那么您将有更好的机会在这里解决它
如何声明内部类以使用外部类的相同泛型类型
内部
已使用与外部
相同的泛型类型。问题是func
没有使用它,它使用的是CharSequence
As SLaksfunc
在所有情况下都会做一些古怪的事情,除了在外部
上调用时:例如,在外部
上调用时,它会将字符序列
添加到数组列表
现在,如果func
已经具有该具体类型的对象:
void func(E e)
{
Inner in = new Inner();
in.add(e);
}
这样做是对的。因此编译器允许这样做
你似乎试图从你所面临的某个特定问题中创建一个通用问题。如果您描述了您正在尝试做的事情,并且失败了,那么您将有更好的机会在这里解决它 Inner in func()的用法是原始的,它应该是Inner in=new Inner()@阿连帕斯洛:错了Internal
不是泛型。E
已可用于您的内部类。您试图执行的操作非常不清楚。当然,in.add(“abc”)
失败,“abc”
不是E
类型(至少就编译器而言,这不是C++)。因此,看起来您应该创建一个Inner
而不是func
Inner-in-func()的用法是原始的,它应该是Inner-in=new-Inner()@阿连帕斯洛:错了Internal
不是泛型。E
已可用于您的内部类。您试图执行的操作非常不清楚。当然,in.add(“abc”)
失败,“abc”
不是E
类型(至少就编译器而言,这不是C++)。因此,看起来您应该创建一个内部
而不是func内部
实际类型在这里不相关,String/Charsequence是示例,我在我的项目中使用其他类层次结构,我想在其中执行此操作。@mice:这仍然不安全<代码>字符串
只是一个例子。请参阅我的最后一段。实际类型在这里不相关,String/Charsequence是示例,我在项目中使用其他类层次结构,我想在其中实现这一点。@mice:这仍然不安全<代码>字符串
只是一个例子。见我的最后一段。