Tag: static

导入的java类中的public static final变量

我碰巧在工作场所遇到过Java代码。 这是场景:有两个类 – ClassA和ClassB 。 ClassA中除了4个公共静态最终字符串值之外什么都没有。 它的目的是使用像ClassA.variable这样的值(不要问我为什么,这不是我的代码)。 ClassB导入ClassA 。 我在ClassA编辑了字符串值并对其进行了编译。 当我运行ClassB我可以看到它使用的是旧值 – 而不是新值。 我不得不重新编译ClassB以使其使用ClassA新值! (我不得不重新编译导入ClassA其他类!) 这只是因为JDK 1.6或我之前应该知道重新编译ClassB ! 开导我。 🙂

为什么我不能在Java中“静态导入”一个“等于”方法?

我喜欢在这里使用这个方法: org.apache.commons.lang.ObjectUtils.equals(Object object1, Object object2) 唯一的缺点(例如,与Google Guava相比),我无法静态导入该方法。 也就是说这没用: import static org.apache.commons.lang.ObjectUtils.equals; …因为我的Eclipse编译器在编写时无法正确链接该方法 equals(obj1, obj2); 错误是: Object类型中的方法equals(Object)不适用于参数(…,…) 这是为什么? 如果在任何超类型中存在具有相同名称(但不是相同的签名)的方法,我的静态导入方法是否不适用? 这是在JLS中正式指定的吗? 还是一些Eclipse编译问题? UPDATE 这也不起作用: import static org.apache.commons.lang.ObjectUtils.defaultIfNull; public class Test { void test() { defaultIfNull(null, null); // ^^ compilation error here } void defaultIfNull() { } } javac错误消息: Test.java:5: defaultIfNull() in Test cannot be applied to (,) […]

为什么我不能在静态上下文中使用“super”变量,即使“super”指的是父类而不是类实例,不像“this”?

我说的是java语言。 变量“this”在类中使用时,引用该类的当前实例,这意味着您不能在静态方法中使用“this”。 但是,“super”,当在类中使用时,指的是该类的超类,而不是超类的实例,这应该意味着你可以在静态方法中使用“super”。 但事实certificate你不能。 一个可能的解释是说“超级”也指超类的一个实例,但我不明白为什么它应该……

在静态和非静态上下文中创建SLF4J记录器的开销是多少?

我总是使用以下模式构建(SLF4J)记录器: private static final Logger log = LoggerFactory.getLogger(MyClass.class); 到目前为止这已经奏效了,但我想知道static上下文在某些时候需要传递具体的类文字,而不是仅仅使用非静态记录器 private final Logger log = LoggerFactory.getLogger(getClass()); 这之前基本上已经问过(并回答过)LOG4J 记录器应该是私有静态还是非静态 和这里 记录器应该是最终的和静态的吗? 我意识到final基本上是强制性的,所以我想知道在非静态上下文中使用SLF4J的开销实际上有多高。 问: 使用是否有任何重大的实际开销 private final Logger log = LoggerFactory.getLogger(getClass()); 过度 private static final Logger log = LoggerFactory.getLogger(MyClass.class); 在普通 (网络)应用程序? (这里不需要“讨论”高端,重载的webapps) 注意,我最终计划使用更好的方法使用CDI来获得SLF4J记录器 @Inject private final Logger log; 如http://www.seamframework.org/Weld/PortableExtensionsPackage#H-TtLoggerttInjection所述 ,但我需要先了解记录器缓存。 子问题:甚至可以使用?: @Inject private static final Logger log; (刚开始用CDI开头)

如何在静态上下文中使用generics类和特定对象?

我会尽力解释。 我使用Play Framework 2,我会做很多CRUD操作。 其中一些将是identitcal,所以我想KISS和DRY所以起初我正在考虑一个包含list , details , create , update和delete方法的抽象类,使用generics对象,并通过指定哪个扩展这个类要使用的对象(型号和表格): public abstract class CrudController extends Controller { protected static Model.Finder finder = null; protected static Form form = null; public static Result list() { // some code here } public static Result details(Long id) { // some code here } public static Result create() […]

使用Action数据模型值在Struts2 JSP中调用静态方法helper类

我是Struts2的新手。 我正在将Struts2与Action中的典型数据模型UserItem使用。 使用Struts标记时,数据模型看起来不太好。 我想要做的是编写一个静态的util方法Helper.printNice(Foo) ,它接受参数Foo并在用户友好的显示中打印出Foo中包含的值。 如何将Struts属性标记与静态方法一起使用? 像这样的东西com.helper.Helper.printNice() 。 原因是我的网络应用程序正在读取供应商填充的数据,在许多列中看起来像这个[“string1”,“string2”,…]。 显然,我不希望以这种格式显示给最终用户。 帮助器方法会使它看起来像string1 string2 等…

如何在spring mvc中提供静态内容?

我在我当前的项目中使用spring-mvc框架。 ROOT文件夹有很多包含html,jsp,css,js等的web文件夹。我的spring mvc配置如下: <!– –> 我在我的java控制器中定义了映射。 但这会导致像任何图像一样的静态内容消失。 如果我通过访问ROOT //。jpg请求任何文件夹中的任何图像,它会给我404响应代码,尽管图像存在。 如果我删除spring-mvc,则会显示图像。 请注意,spring-mvc的resources属性适用于静态内容,但需要我的静态内容存在于特定文件夹中,例如resouce文件夹。 所以这种方法对我没用。

Java:覆盖父类的静态变量?

我有以下类,我正在使用它作为我项目中所有模型的基础: public abstract class BaseModel { static String table; static String idField = “id”; public static boolean exists(long id) throws Exception { Db db = Util.getDb(); Query q = db.query(); q.select( idField ).whereLong(idField, id).limit(1).get(table); return q.hasResults(); } //snip.. } 我正试图通过以下方式扩展它: public class User extends BaseModel { static String table = “user”; //snip } 但是,如果我尝试执行以下操作: if […]

在java中创建内部类对象的问题

这是代码。 public class Test { class InnerClass{ } public static void main(String[] args){ InnerClass ic = new InnerClass(); } } 它说错误信息 non-static variable this cannot be referenced from a static context after creation of object ic. 任何人都可以给我理由吗? 谢谢

为什么Java类既不是抽象的也不是最终的

假设我有一个只包含静态方法和变量的实用程序类。 例如: public abstract final class StringUtils { public static final String NEW_LINE = System.getProperty(“line.separator”); public static boolean isNotNullOrSpace(final String string) { return !(string == null || string.length() < 1 || string.trim().length() < 1); } } 在这种情况下,使类既抽象又最终是有意义的。 摘要因为制作这个类的对象没有用,因为所有方法都可以静态访问。 最后因为派生类不能从该类inheritance任何内容,因为它没有任何非静态成员。 C#允许这些类的静态修饰符。 为什么Java不支持这个?