当前位置: 首页 > 面试题库 >

具有类和嵌套静态接口的Java泛型

严昊昊
2023-03-14
问题内容

我想在嵌套的静态接口中使用泛型类。我的目标是做这样的事情:

public class MyClass<T>{
    private MyInterface task;

    public static interface MyInterface{
        void aMethod (T item);
    }
}

但是我得到一个错误:无法对非静态类型T进行静态引用。如果进行一些更改(如下所述),我可以在接口内部使用泛型,但是我想避免使用此方法,因为编写同一个类两次:一次用于MyClass,一次用于MyInterface。

public class MyClass<T>{
    private MyInterface<T> task;

    public static interface MyInterface<T>{
        void aMethod (T item);
    }
}

谢谢。

编辑 :我想这样做:

MyClass c = new MyClass<String> ();
c.setInterface (new MyClass.MyInterface (){
    @Override
    public void aMethod (String s){
        ...
    }
);

要么

MyClass c = new MyClass<AnotherClass> ();
c.setInterface (new MyClass.MyInterface (){
    @Override
    public void aMethod (AnotherClass s){
        ...
    }
);

问题答案:

静态嵌套类或嵌套接口(顺便说一句,始终是静态的)与其外部类(或接口)没有关系,除了名称空间嵌套和对私有变量的访问之外。

因此,在您的情况下,外部类的类型参数在嵌套接口内部不可用,您应该再次定义它。 为避免混淆,我建议对此内部参数使用其他名称。

(以标准API为例,查找Map.Entry<K,V>嵌套在接口内部的接口Map<K,V>,但无法访问其类型参数,因此需要再次声明它们。)



 类似资料:
  • 问题内容: 我很难用Java的非静态嵌套类来解决问题。考虑以下示例,该示例先显示“ Inner”,然后显示“ Child”。 我知道Inner实例始终必须与Outer实例相关联,这也适用于Child,因为它扩展了Inner。我的问题是语法的含义- 为什么调用内部构造函数? 我只看到一个用于调用超类构造函数和调用重写方法的超类版本的纯文本,但从未使用过这种形式。 问题答案: 这称为“合格的超类构造函

  • 我正在用Java建模,并使用构建器模式。在许多情况下,一些共同成员是在父级中定义的,而其他成员则是在从父级继承的子级上定义的。一个例子如下: 如果删除,则在上得到相同的错误。看来我对静态嵌套类的继承有一个根本的误解。 为什么当返回时,编译器会抱怨方法不在中?有没有一种方法可以像我所尝试的那样,利用继承和这个构建器模式,允许在父级中定义公共成员,在子级中定义其他成员?

  • 问题内容: 我将Java转换为C#,并具有以下代码(请参阅JavaContext中有关其使用的讨论。一种方法可能是创建一个单独的文件/类,但是是否有C#idom保留了Java代码中的意图? 问题答案: 看看这个 http://blogs.msdn.com/oldnewthing/archive/2006/08/01/685248.aspx 我正在专门看 换句话说,Java内部类是C#无法使用的语法

  • 问题内容: 我正在在线阅读有关Java中嵌套接口的一些文章[1] [2],我知道 但是我不确定 简而言之,“嵌套接口始终是静态的”是真的吗? [1] https://beginnersbook.com/2016/03/nested-or-inner-interfaces-in- java/ [2] https://www.programcreek.com/2013/08/inner-interfa

  • 问题内容: 我刚刚在我们的代码库中找到了一个静态嵌套接口。 我以前从未见过。原始开发人员遥不可及。因此,我不得不问: 静态接口背后的语义是什么?如果我删除,会发生什么变化static?为什么有人会这样做? 问题答案: 上例中的static关键字是多余的(嵌套接口自动为“ static”),可以删除而不会影响语义;我建议将其删除。接口方法上的“公共”和接口字段上的“公共最终”也是如此-修饰符是多余的

  • 问题内容: 好的,这是我的问题: 我有一个包含interfaces的列表-和扩展该接口的接口的列表:。我要设置。我不希望使用任何东西或会花费更多内存的东西,因为我正在做的事情已经非常耗费成本。我确实需要能够说。我已经尝试过,但是后来我无法将接口添加到列表中,只能将SubInterfaces 添加到列表中。有什么建议? 我希望能够做这样的事情: RecordKeeper类是包含接口列表的类(NOT