内部类的Java类型捕获
我有以下Java类(在这种形式中显然是无用的):内部类的Java类型捕获,java,types,Java,Types,我有以下Java类(在这种形式中显然是无用的): public class EntrySet<T> { public static class Entry<T> { T obj; } private final Set<Entry<T>> set; public EntrySet() { this.set = Sets.newHashSet(); } publi
public class EntrySet<T> {
public static class Entry<T> {
T obj;
}
private final Set<Entry<T>> set;
public EntrySet() {
this.set = Sets.newHashSet();
}
public Set<Entry<T>> getEntries() {
return set;
}
}
公共类入口集{
公共静态类条目{
T-obj;
}
私有最终集;
公共入口集(){
this.set=Sets.newHashSet();
}
公共集合getEntries(){
返回集;
}
}
给定此类,以下内容不可编译:
EntrySet<?> entrySet = new EntrySet<SomeClass>();
Set<EntrySet.Entry<?>> entries = entrySet.getEntries();
EntrySet EntrySet=new EntrySet();
Set entrySet=new entrySet();
Set tmp=entrySet.getEntries();
Set删除entrySet
您正试图将Set
分配给Set entrySet=new entrySet();
fn(入口集);
...
私有静态void fn(EntrySet EntrySet){
Set entries=entrySet.getEntries();
删除entrySet
您正试图将集合
分配给集合entrySet=new entrySet();
fn(入口集);
...
私有静态void fn(EntrySet EntrySet){
Set entries=entrySet.getEntries();
无界通配符
类似于所有泛型类型的超级类型。它类似于对象类对所有java类的作用。对无界通配符引用可以执行的唯一操作是那些采用“null”的操作(如果参数引用中使用了
参数)或者那些返回“对象”(如果返回类型引用中使用了
参数)的对象。因此,如果返回类型对象的引用,代码将编译
class EntrySet<T> {
public static class Entry<T> {
T obj;
}
private final java.util.Set<Entry<T>> set;
public EntrySet() {
this.set = new java.util.HashSet();
}
public java.util.Set<Entry<T>> getEntries() {
return set;
}
public static void main(String [] args){
EntrySet<?> entrySet = new EntrySet<SomeClass>();
//java.util.Set<EntrySet.Entry<?>> entries = entrySet.getEntries(); // Error
Object o = entrySet.getEntries(); // OK !
}
}
class SomeClass{}
类入口集{
公共静态类条目{
T-obj;
}
私有最终java.util.Set;
公共入口集(){
this.set=new java.util.HashSet();
}
public java.util.Set getEntries(){
返回集;
}
公共静态void main(字符串[]args){
EntrySet EntrySet=new EntrySet();
//java.util.Set无界通配符
类似于所有泛型类型的超级类型。它类似于对象类对所有java类的作用。可以对无界通配符引用执行的唯一操作是那些采用“null”的操作(如果参数引用中使用了
参数)或者那些返回“对象”(如果返回类型引用中使用了
参数)的对象。因此,如果返回类型对象的引用,代码将编译
class EntrySet<T> {
public static class Entry<T> {
T obj;
}
private final java.util.Set<Entry<T>> set;
public EntrySet() {
this.set = new java.util.HashSet();
}
public java.util.Set<Entry<T>> getEntries() {
return set;
}
public static void main(String [] args){
EntrySet<?> entrySet = new EntrySet<SomeClass>();
//java.util.Set<EntrySet.Entry<?>> entries = entrySet.getEntries(); // Error
Object o = entrySet.getEntries(); // OK !
}
}
class SomeClass{}
类入口集{
公共静态类条目{
T-obj;
}
私有最终java.util.Set;
公共入口集(){
this.set=new java.util.HashSet();
}
public java.util.Set getEntries(){
返回集;
}
公共静态void main(字符串[]args){
EntrySet EntrySet=new EntrySet();
//java.util.setEntrySet=new EntrySet();?这只是一些伪代码来澄清问题。这当然可以,但在我的例子中,我只有一个EntrySet
。你试过EntrySet EntrySet=new EntrySet()吗?这只是一些使问题清晰的伪代码。这当然会起作用,但在我的情况下,我只有一个入口集
。你不能添加入口集。入口
到集合我不确定我是否理解了这个问题。正如@miserablevable所说,你不能插入集合。我相信你可以添加到集合中
也会起作用(某些目的).ASet@MiserableVariable但是我们并不是在谈论Set>
,这是一个完全不同的问题。你不能添加EntrySet。Entry
到SetI我不确定我是否理解这个问题。正如@MiserableVariable所说,你不能插入SetI我相信你可以添加到Set>
也会起作用(对于某些目的)。ASet@MiserableVariable但我们不是在谈论Set>
,这是一个完全不同的问题。
class EntrySet<T> {
public static class Entry<T> {
T obj;
}
private final java.util.Set<Entry<T>> set;
public EntrySet() {
this.set = new java.util.HashSet();
}
public java.util.Set<Entry<T>> getEntries() {
return set;
}
public static void main(String [] args){
EntrySet<?> entrySet = new EntrySet<SomeClass>();
//java.util.Set<EntrySet.Entry<?>> entries = entrySet.getEntries(); // Error
Object o = entrySet.getEntries(); // OK !
}
}
class SomeClass{}