代码之家  ›  专栏  ›  技术社区  ›  freakish

嵌套在泛型类中的私有类也应该是泛型的吗?

  •  0
  • freakish  · 技术社区  · 6 年前
    public class Foo<T>
    {
        private class NestedWrapper
        {
            T Value;
        }
        private NestedWrapper MyNested;
    }
    

    public class Foo<T>
    {
        private class NestedWrapper<S>
        {
            S Value;
        }
        private NestedWrapper<T> MyNested;
    }
    

    在C中,这两种方法有什么真正的区别吗?其他然后附加 <T>

    注意,私有性有点重要,因为嵌套类在外部是不可访问的。我们可以假设 NestedWrapper 班级意志 总是 T 它的“父”。

    编辑: 实际上我正在经历 AtomicMarkableReference Java实现: http://fuseyism.com/classpath/doc/java/util/concurrent/atomic/AtomicMarkableReference-source.html 我正在用C#重新实现这个类(它是Java标准库的一部分)。正如您在Java中看到的,使用了第二种样式。我甚至不确定第一种样式在Java中是否有效(因为我不是Java程序员),但在C#中我们仍然有两种可能的方法。我只是想知道是否有什么理由选择一个而不是另一个。

    2 回复  |  直到 6 年前
        1
  •  1
  •   Ondrej Tucny    6 年前

    这两种方法真的有什么区别吗?

    是的,那里 NestedWrapper 有自己的类型参数,独立于 Foo 的自身类型参数。因此 实际的 类型可能完全不相关。

    T 固定在 NextedWrapper

    在第二种情况下,以下几点很好:

    private NestedWrapper<T> nestedWrappedT;
    private NestedWrapper<int> nestedWrappedInt;
    private NestedWrapper<string> nestedWrappedString;
    

    事实就是这样 private

        2
  •  0
  •   Michał Turczyn    6 年前

    在第一种方法中, T 为外部类设置,然后在类中使用的任何位置都不能更改(如果没有其他泛型类型,则绑定到 T型 ).

    在第二种方法中,可以为外部类和内部类分别设置泛型类型。但是,由于这个类是私有的,所以不能从类外部设置这个泛型参数。

    但你在课堂之外无法控制。

    在第一种方法中,您可以从类外部决定在内部类中应该使用哪种类型。您可以从外部控制传递给内部类的泛型类型。