JetBrains Rider - 像 getter/setter 一样生成 Java? [关闭]

Posted

技术标签:

【中文标题】JetBrains Rider - 像 getter/setter 一样生成 Java? [关闭]【英文标题】:JetBrains Rider - Generate Java like getter/setter? [closed] 【发布时间】:2019-06-20 14:24:39 【问题描述】:

有谁知道如何使用 Rider IDE 将 C# getter 和 setter 转换为类似 java 的 getter 和 setter 模式?

转换这个:

    public Transform List
    
        get  return list; 
        set  list = value;        
    

到这里

public Transform GetList()  return this.list; 
public SomeClass SetList(Transform list)  this.list = list; return SomeClass; 

这对于以流畅的构建器模式链接设置器很有用。

【问题讨论】:

我的问题是:为什么?我的假设是这在 Rider 中不存在,因为它不是在 c# 中执行 getter 和 setter 的公认方式 @genaray "因为问题包含 java 代码...因为我更喜欢这种方式..." - 我不是 C# 专家,但这不合逻辑假设 Java 代码在 C# 中工作(当然,除非您使用一些高级的多语言编译器,或者这部分的语言在偶然情况下是相同的)。无论如何,如果你不喜欢 C#,那就不要使用它。 Because i like it more that way... 唉,工具经过优化以创建 真实 属性(您的代码没有)。没有人愿意鼓励你的想法。 我想这里的每个人都想告诉你的是......有个人偏好很好,这里没有人有任何判断。但是期望 C# 工具遵循 Java 约定是不现实的。我们的专业建议是在编写 C# 代码时遵循 C# 约定,以使代码更加地道和易于理解。 (反过来想……如果你在一个 Java 项目上,而另一个开发人员坚持写“像 C# 一样”的代码,你期望这个项目有多成功?) 这并不是只是的偏好。正确的代码创建一个 .NET 属性。 C# 中的 Java 风格没有(这不是争论的焦点 - 它只是没有)。这可能会破坏 JSON 序列化等。我希望 OP 非常清晰。 这是一个非常糟糕的主意。 【参考方案1】:

一个明显的非答案:停止浪费“双倍”你的时间!

C# 不是 Java。与一个工具来对抗目标语言的本地惯用结构,这可能是毫无意义的。

源代码是为人类阅读而编写的。好的源代码永远不会让读者感到惊讶。一个有经验的 c# 程序员会像 getter 和 setter 一样看待你的 Java,并且只能想知道:“为什么他用那些奇怪的方法污染这些类,而不是使用 c# 属性支持”。

除此之外,您可能还想阅读https://en.m.wikipedia.org/wiki/Uniform_access_principle 以了解为什么 c# 属性实际上是比具有 getter/setter 对的 Java 字段更好 的方法!

或者就像他们在 2000 年前所说的那样:当你来到罗马时,像罗马人那样做!如果您不想像罗马人那样做,请远离罗马,或者在您的特定情况下使用 c#。

【讨论】:

C# 确实不是 java,但属性也不提供与 java getter 和 setter 相同的功能。您不能链接属性集调用,这对于提供用于不可变类更新(创建新实例)的出色单行可用构建器模式真的很烦人。 @LucasMontenegroCarvalhaes 正如我所说的那样;我确实认为 C# 在这里有优势。但这不是我的意思。我只是在谈论人们应该小心将语言 A 变成 B 的事实。 答案是完美的。它基于语言的观点。原始问题下的评论强调了如果您不遵循 C# 约定,序列化程序可能会中断。此外,用于改变对象的链式设置器并没有真正的吸引力,除非它是一个构建器,在这种情况下,C# 有一个很好的语法来第一次在对象中设置属性 @LucasMontenegroCarvalhaes “源代码不应该让读者感到惊讶”不是意见。这是快速确定源代码质量的简单标准。请注意:我的内容以“明显的非答案”开头;并且提出问题的人接受了它。 "C# is not java" ... 是意见吗?严重地?我认为这实际上是我整个答案中最真实的陈述。【参考方案2】:

OP 可能来自 java 世界。在菜单(Intellij)Java IDE->代码->生成 在生成菜单中,“Getter and Setter”是第四个选项。 在 C# 世界(Rider)中,属性用于公开选定的字段。 Jetbrains Recommends 生成属性而不是 Java getter-setter 方式。

【讨论】:

这些屏幕截图来自c# ide?因为那看起来更像是一些 Java 工具,在 Java 项目中工作 Java 源代码?! 理解 Person 提出的问题并回答,而不是尝试回答不同的问题。是的,这来自 jetbrains JAVA IDE。请注意,在它之后我注意到属性更好。 @AkinOkegbile 问题是关于 Rider 中的 C# 代码,这是一个 .NET IDE。 @OwenPauling 问题是关于 C# 中不存在的约定、getter 和 setter。制作 ide 的 Jetbrains 在其 IDE 套件中使用相同的组合键/菜单选项。我知道会有一个生成。在 C# 领域,属性是你应该生成的。

以上是关于JetBrains Rider - 像 getter/setter 一样生成 Java? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

JetBrains Rider 破解 (ideaIU等等开发工具都通用)2018-02-27

JETBRAINS RIDER:剖析 Rider 2017.3新功能

在 JetBrains Rider 中找不到目标框架

JetBrains宣布Project Rider:一款C#跨平台IDE

JetBrains Rider 移除高亮显示

在 Mac 上使用 Jetbrains Rider 开发 WPF 应用程序