Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 对静态上下文的引用类似于类自引用'this',经常使用'this'作为编码样式_Java_Reference_Static_This - Fatal编程技术网

Java 对静态上下文的引用类似于类自引用'this',经常使用'this'作为编码样式

Java 对静态上下文的引用类似于类自引用'this',经常使用'this'作为编码样式,java,reference,static,this,Java,Reference,Static,This,我一直在使用班级自我参考这个,无论它是否是强制性的。我相信它有助于代码的可读性,因为阅读它的人不必自己去弄清楚变量属于什么范围 我希望与静态范围类似:在所有对静态上下文的引用之前加一个static关键字,使代码更易于解释 然而,Java不喜欢它。我知道从技术上讲我可以只使用类名,但这看起来很难看,尤其是当一个类有一个很长的名称时。我也可以在静态方法和属性的名称前面加上一个特殊的前缀,但我不想被认为是偏执狂 你们会觉得这是一个好的OOP风格吗?或者我应该完全忘记上面提到的任何事情,让javac完成

我一直在使用班级自我参考
这个
,无论它是否是强制性的。我相信它有助于代码的可读性,因为阅读它的人不必自己去弄清楚变量属于什么范围

我希望与静态范围类似:在所有对静态上下文的引用之前加一个
static
关键字,使代码更易于解释

然而,Java不喜欢它。我知道从技术上讲我可以只使用类名,但这看起来很难看,尤其是当一个类有一个很长的名称时。我也可以在静态方法和属性的名称前面加上一个特殊的前缀,但我不想被认为是偏执狂


你们会觉得这是一个好的OOP风格吗?或者我应该完全忘记上面提到的任何事情,让javac完成所有范围绑定吗?

大多数IDE都可以非常快速地找到引用变量的源。因此,现在人们认为仅仅是为了分散注意力而添加关于其范围等的额外提示


总之,请不要不必要地使用
这个
,请放弃你所有的努力去抓住你后面的程序员的手,当然,除了选择好的名字、编写好的代码和添加好的注释之外。

你可以用一个简单的命名方案将所有的静态方法放在一个静态的内部类上。例如:

public class Myclass {

    public void instanceMethod() {
        Static.doThing();
    }


    public static class Static {
        public static void doThing() {
            //blah
        }
    }
}

大多数Java程序员只希望在需要解决歧义的地方看到
this
关键字。按照你的提议自由地使用它可能会让其他人产生不必要的怀疑。对于静态,我想你可以使用匈牙利式的符号,如果这是你的拿手好戏的话,但在查看代码时也不难发现它们(除非它是非常单一的或其他的东西)。

不要在工作中尝试这一点:

public class Foo
{
    private static class This extends Foo{}

    static int x;
    static void f(int x){}

    void test()
    {
        This.f(This.x);
    }
}

有一些约定将
this
作为成员字段(甚至方法)的所有用法的前缀。变量或类名的前缀也有一些约定(臭名昭著的匈牙利符号)。例如,官方的Android代码风格指南要求在私有成员字段名称前面加上
m-
(例如
private int-mSize
)前缀,在私有静态字段名称前面加上
s-

就我个人而言,我讨厌这两种约定,因为它们只是把已经相当冗长的Java代码弄得乱七八糟。现代IDE提供了一些视觉区分的方法。例如,在Eclipse中,局部变量是标准的黑色字体,而字段是蓝色的。静态方法或字段以斜体显示

它们还提供了浏览源代码的好方法。按住Ctrl键并单击变量/方法/类型的名称将直接进入其声明。这里有大纲视图。Eclipse甚至会在鼠标悬停在工具提示上时显示有关此类信息的工具提示


是的,有人可能会提出这样的论点:您有时不在IDE中读取代码,而是在一个简单的文本编辑器中读取代码。我有时也这样做是为了快速浏览代码,但老实说,每当我想做一些严肃的编码时,不使用IDE只是一种受虐狂。

“良好的OOP风格”与此无关。我会觉得很烦人。当涉及到实例或类方法时,适当大小的方法应该很少留待想象。对于复杂的项目,IDE应该有助于了解发生了什么,对于更简单的代码,在head中解析作用域应该是相当简单的。对不起,这纯粹是邪恶的。:)@纳提克斯梅。你不会发现我这么做,但我也不喜欢代码势利。如果人们喜欢它,那么给他们力量。这是一个很好的解决方案!但如果它没有被广泛使用,人们可能会觉得它很奇怪。@picrin我怀疑是否有人真的使用过这种模式。老实说,不推荐。是的,我想我会保持我的类整洁,并在头脑中练习范围绑定。谢谢你的非标准想法!我实际上使用了一个非常简单的文本编辑器(gedit),因为我不喜欢我的机器在后台运行JVM时消耗太多资源,而且我发现显式的自引用可以加快代码编写。然而,我不想激怒任何跟着我读代码的人,所以我宁愿遵循最常见的做法。如果使用
这个
的公关效果不好,我想我会放弃它。@picrin-我为你的残疾感到抱歉:)-你要么让你的老板给你买一台像样的电脑,要么攒钱买一台。不过,仍然有一些编程名人使用更低级的东西,比如vi或emacs,所以我想,在某些情况下,使用轻量级IDE可能只是一个品味问题。撇开IDE与文本编辑器的争论不谈,我认为一个好的程序员不应该在不了解变量在做什么的情况下到处给变量赋值,从而发现变量的类型,范围和可访问性是一个变量,它应该是这个过程的一部分。@ PICRIN我看不到VI或Emacs是如何比GeDIT低级别的,这是完全相反的。我不太确定匈牙利符号是否符合CAMELLAST,我只看到它使用了OnMon预兆(如果你喜欢拉丁语;))东欧C++程序员,这使得它既远离Java,也远离主流。编程的美妙之处在于,如果你愿意,你可以拥有匈牙利骆驼
private static\u sOurCamel=new Camel()
但是,是的,匈牙利符号在(西方?)Java:)中的自由使用几乎与匈牙利符号一样罕见。@guctin记住匈牙利符号有两种类型。说完这些,我正在浏览一些GWT示例代码,它们在类中到处使用
这个
。结论:做你喜欢做的事——如果它对谷歌来说足够好的话……是的,它是相当深入的java OOP。为什么不直接做