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/