当像这样使用时:
import static com.showboy.Myclass;
public class Anotherclass{}
Run Code Online (Sandbox Code Playgroud)
import static com.showboy.Myclass和之间有什么区别import com.showboy.Myclass?
刚收到评论评论我静态导入该方法并不是一个好主意.静态导入是来自DA类的方法,该类主要使用静态方法.因此,在业务逻辑的中间,我有一个似乎属于当前类的da活动:
import static some.package.DA.*;
class BusinessObject {
void someMethod() {
....
save(this);
}
}
Run Code Online (Sandbox Code Playgroud)
审稿人并不热衷于我改变代码而我没有,但我确实同意他.给出非静态导入的一个原因是,在定义方法的地方很混乱,它不在当前类中而不在任何超类中,所以它也有一段时间来识别它的定义(基于Web的审查系统没有可点击的IDE之类的链接:-)我真的不认为这很重要,静态导入仍然很新,我们很快就会习惯定位它们.
但另一个原因,我同意的是,一个不合格的方法调用似乎属于当前对象,不应该跳转上下文.但如果确实属于它,那么扩展超级类是有意义的.
所以,当它是有意义的静态导入的方法呢?你什么时候做的?您是否喜欢不合格电话的样子?
编辑:流行的观点似乎是静态导入方法,如果没有人会把它们混淆为当前类的方法.例如,java.lang.Math和java.awt.Color中的方法.但是如果abs和getAlpha不模糊,我不明白为什么readEmployee是.在许多编程选择中,我认为这也是个人偏好的事情.
感谢您的回复,我正在结束这个问题.
我试图穿过我和Mockito之间的砖墙.为了获得Mockito东西的正确导入静态语句,我已经把头发撕掉了.你认为有人会抛出一张桌子,说anyInt()来自org.mockito.Matchers,而when()来自org.mockito.Mockito等,但这对新手来说太有帮助了,不是吗?
这种事情,特别是当与无数更多以星号结尾的import语句混合在一起时,并不总是非常有用:
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
Run Code Online (Sandbox Code Playgroud)
是的,我知道并且一直在尝试使用Eclipse Window - > Preferences-> Java - > Editor-> Content Assist - > Favorites机制.它有所帮助,但它并没有击中头部.
任何对这个问题的答案都将不胜感激.
非常感谢,Russ
C#是否具有Java的静态导入功能?
所以不要像编写代码那样代码
FileHelper.ExtractSimpleFileName(file)
Run Code Online (Sandbox Code Playgroud)
我可以写
ExtractSimpleFileName(file)
Run Code Online (Sandbox Code Playgroud)
和编译器会知道我的意思是来自FileHelper的方法.
让我们说我们有这些包和类:
package p1;
public class A1 {
public static void a() {}
}
package p2;
public class A1 {
public static void a() {}
}
package p3;
import static p1.A1.a;
import static p2.A1.a;
public class A1 {
public static void test() {
}
}
Run Code Online (Sandbox Code Playgroud)
我想知道,为什么静态导入方法是合法的(不会导致编译时错误)在包中p3?我们将无法在test()方法中进一步使用它们,因为这样的使用将导致编译时错误.
为什么它与正常导入类不一样.让我们说我们想A1从包中导入类p1并p2进入p3:
package p3;
import p1.A1;
import p2.A1;
Run Code Online (Sandbox Code Playgroud)
这种导入是非法的,会导致编译时错误.
通过实验,我发现即使在静态上下文中,Java非静态方法也会覆盖范围内所有相同的命名方法.即使不允许参数重载.喜欢
import java.util.Arrays;
import static java.util.Arrays.toString;
public class A {
public static void bar(Object... args) {
Arrays.toString(args);
toString(args); //toString() in java.lang.Object cannot be applied to (java.lang.Object[])
}
}
Run Code Online (Sandbox Code Playgroud)
我在规范中找不到任何相关内容.这是一个错误吗?如果不是,有没有理由实施这样的语言?
UPD:Java 6不编译此示例.问题是 - 为什么?
考虑以下课程
public final class Constant {
public static final String USER_NAME="user1";
//more constant here
}
Run Code Online (Sandbox Code Playgroud)
这个类在包B中.
现在我将在包A中使用它.考虑以下两种可以使用的方法.
方法1-使用 import B.Constant
import B.Constant;
public class ValidateUser {
public static void main(String[] args) {
if(Constant.USER_NAME.equals("user1")){
}
}
}
Run Code Online (Sandbox Code Playgroud)
方法2-使用 import static B.Constant.USER_NAME;
import static B.Constant.USER_NAME;
public class ValidateUser {
public static void main(String[] args) {
if(USER_NAME.equals("user1")){
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,在这种情况下,静态导入是否有任何差异或优势?
我的代码在Eclipse中编译得很好,但是当我尝试从命令行编译时(通过我们基于ruby的构建器系统),我收到以下错误消息:
static import only from classes and interfaces
Run Code Online (Sandbox Code Playgroud)
建议不允许静态导入公共静态字段.我应该寻找什么来帮助诊断这个问题?我该如何解决?
更新: per @Ted的请求,引用文件中的常量声明:
public static final String NULL = "<NULL>";
Run Code Online (Sandbox Code Playgroud)
和引用文件中的(bowdlerized)引用:
import static my.path.MyClass.NULL;
Run Code Online (Sandbox Code Playgroud) 我在Android Studio中使用静态导入:
import static android.opengl.GLES20.*;
Run Code Online (Sandbox Code Playgroud)
但android studio强调了与代码中静态导入相关的每个静态成员/常量.
我也试图寻找一个选项,Settings > Editor > Color & Fonts > Java但没有发现改变颜色.
如何从另一个c#源文件导入静态方法并在没有"点"的情况下使用它?
喜欢 :
foo.cs
namespace foo
{
public static class bar
{
public static void foobar()
{
}
}
}
Run Code Online (Sandbox Code Playgroud)
Program.cs中
using foo.bar.foobar; <= can't!
namespace Program
{
class Program
{
static void Main(string[] args)
{
foobar();
}
}
}
Run Code Online (Sandbox Code Playgroud)
我不能只是foobar();,但如果我写using foo;在顶部并foobar()尽可能地打电话foo.bar.foobar(),尽管很冗长.对此有任何解决方法吗?
static-import ×10
java ×9
c# ×2
import ×2
.net ×1
mockito ×1
modifier ×1
overloading ×1
scope ×1