English 中文(简体)
Java最后变量的初始问题
原标题:Problems initializing a final variable in Java

我对贾瓦的一个问题稍有改动,开始去我,我实际上无法想出一条适当的办法。

我有一个最终但充满活力的物体财产。 这就是说,一旦被分配,价值就保持不变,但每开学时间的价值可能有所不同。 因此,我宣布班级开始时的班级变量——即<代码> 私人最后班级:NAME;。 然后,在建筑商中,我给它分配了价值——例如:FILE_NAME = 建造FileName()。

问题始于我在<条形码>中制定法律,放弃例外。 因此,我试图在施工者中这样做:

try{
   FILE_NAME = buildFileName();
}
catch(Exception e){
   ...
   System.exit(1);
}

现在我有了一个错误——“最后领域可能不是初步的”。 这就是我开始在贾瓦严格编辑上稍加了解的情况。 我知道,这一胜利是一个问题,因为它如果能够赶上方案,就会退出......。 但是,汇编者没有知道,因此,没有允许这一守则。 如果我试图在渔获量上添加一个 du子,那么我就认为:“最后的田地FLE_NAME可能已经被分配了”。 我显然可以在审判副渔获物之前分配一个违约值,因为我只能指派给它一次。

任何想法......

最佳回答

第二,我认为,我刚刚提出解决办法! - 使用中间变量。

String fileName = null;
try{
   fileName = buildFileName();
}
catch(Exception e){
   ...
   System.exit(1);
}
FILE_NAME = fileName;

不要忘记,我为什么要花这么长时间来思考这个问题。

问题回答

如何

String tempName = null;
try{
   tempName = buildFileName();
}
catch(Exception e){
   ...
   System.exit(1);
}
FILE_NAME = tempName;

Either

try {
   FILE_NAME = buildFileName();
} catch (Exception e){
   ...
   System.exit(1);
   throw new Error();
}

或者有些人倾向于:

private static final String FILE_NAME = fileName();

private static String fileName() {
    try {
        return buildFileName();
    } catch (Exception e){
        ...
        System.exit(1);
        throw new Error();
    }
}

但是,静态初步计算器中的<代码>System.exit可能是一个坏的想法。 它去我,检查你的单位。

如果你错误的流程设计得当,该系统就应该多余。 如果驱逐出一名Error,那么你的计划会拖入野地。

按照与禁止化学武器组织问题相同的思路,我不得不找到一种办法,把价值分配给最后领域,从档案系统的“properties”档案中读到,因此,在出现之前,我可以知道这些价值。 采用一种普遍化的方法,在阅读财产档案的内容后,将价值分配到准备开标的物中,这是一份Hail Mary通行证,该通行证是经过感谢的。 这还限制了每份档案必须读到一次,而只是通过法律检查,看看财产物体是否现在无效。 当然,一旦分配,最后的实地值就不能改变,除非改变其“最终”地位,办法是通过在运行时间修改实地定义(如在SO的其他一些地方讨论,例如)。 - ak,但我爱! 《刑法》例例常年错误检查,例如,对于“国家扫盲计划”而言,短短时间检查:

import java.util.Properties;

public class MyConstants {

  private static Properties props; // declared, not initialized,
                                   // so it can still be set to
                                   // an object reference.

  public static String MY_STRING = getProperty("prop1name", "defaultval1");
  public static int MY_INT = Integer.parseInt(getProperty("prop2name", "1"));
  // more fields...

  private static String getProperty(String name, String dflt) {
   if ( props == null ) {
     readProperties();
   }
   return props.getProperty(name, dflt);
  } 

  private static void readProperties() {
     props = new Properties(); // Use your fave way to read
                      // props from the file system; a permutation
                      // of Properties.load(...) worked for me.
  } 

  // Testing...
  public static void main(String[] args) {
      System.out.println(MY_STRING);
      System.out.println(MY_INT);
  }

}

这使你们能够把财产外观地读到 app中,并且仍然标明其价值为“最终”的田地。 这还使你能够保证最后外地价值的退还价值,因为房地产类别中的“财产”允许在财产中找到关键价值物时,以违约价值通过该方法。





相关问题
Spring Properties File

Hi have this j2ee web application developed using spring framework. I have a problem with rendering mnessages in nihongo characters from the properties file. I tried converting the file to ascii using ...

Logging a global ID in multiple components

I have a system which contains multiple applications connected together using JMS and Spring Integration. Messages get sent along a chain of applications. [App A] -> [App B] -> [App C] We set a ...

Java Library Size

If I m given two Java Libraries in Jar format, 1 having no bells and whistles, and the other having lots of them that will mostly go unused.... my question is: How will the larger, mostly unused ...

How to get the Array Class for a given Class in Java?

I have a Class variable that holds a certain type and I need to get a variable that holds the corresponding array class. The best I could come up with is this: Class arrayOfFooClass = java.lang....

SQLite , Derby vs file system

I m working on a Java desktop application that reads and writes from/to different files. I think a better solution would be to replace the file system by a SQLite database. How hard is it to migrate ...

热门标签