java - 嵌套在泛型类中的私有(private)类也应该是泛型吗?

标签 java c# generics

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>在第二个中。

请注意,私有(private)化有些重要,因为外部无法访问嵌套类。我们可以假设NestedWrapper类将始终共享泛型类型 T及其“父级”。

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

最佳答案

Is there any real difference between these two approaches?

是的,确实存在差异,因为 NestedWrapper 有自己的类型参数,独立于 Foo 自己的类型参数。因此,实际类型可能完全不相关。

在第一种情况下,T 被固定在 NextedWrapper 中,您没有机会为其他类型创建包装器。

在第二种情况下,以下内容完全没问题:

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

事实上它是私有(private)本身并没有什么区别。

关于java - 嵌套在泛型类中的私有(private)类也应该是泛型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52314796/

相关文章:

c# - 在C#中玩byte[]

java - Android - Java - 从另一个实例类访问 Main-Activity 中的私有(private)变量

java - LWJGL 'java.lang.UnsatisfiedLinkError' : no lwjgl in java. 库路径

c# - map 控件 : Remove or hide default map layer

java - 什么是\xHEX 字符?是否有它们的表格?

ios - 使用通用协议(protocol),如何在一个 View Controller 中具有不同的关联值来确认协议(protocol)

c# - 检查如果类型是列表返回 false

java - 如何在Java中通过drawString使文本输出居中

java - 带有敏感信息的 Spring Boot 外部配置不起作用

c# - 如何使用 SqlCommand 参数指定选择查询的架构名称