【问题标题】:how to structure Java code for reuse? [closed]如何构造Java代码以供重用? [关闭]
【发布时间】:2013-06-19 22:07:06
【问题描述】:

我正在寻找类似 C 或 C++ 中的编译器指令或类似 Java 的东西。为什么要问?

我有一段 Java 代码,它曾经用于一个项目。然后是第二个项目,代码是基于第一个项目的。所以第一个副本有很多变化。包名和内容等结构相同,但内部类不同。

现在有第三个项目,类似于第一个和第二个混合在一起。

如何构建代码以拥有一个包含所有三个项目代码的代码库/git repo?以及如何确定要运行的代码路径?在运行时是项目 1 还是项目 2 或项目 3?编译器指令用于 C/C++。爪哇?

【问题讨论】:

  • 使用if(flag) 而不是#ifdef

标签: java code-reuse


【解决方案1】:

Java 中没有编译器指令 (ifdef)。

抽象出常见的内容并创建一个库(或多个库,如果需要),提供可重用的基本功能。然后重构所有项目以使用(即扩展或组合)库中的类。这就是面向对象编程的全部内容。

【讨论】:

  • 我理解抽象和 Java 中没有 ifdef 的事实......要告诉代码正在运行什么应用程序,只需使用命令行参数?还有更优雅的方式吗?
  • 不,我的意思是“抽象”作为动词。查看不同应用程序如何使用代码并找出共同点。然后编写一组捕获该通用基础功能的类,并根据每个项目的需要对其进行扩展。
  • 在 Java 中大部分时间不需要 #ifdef,因为在 Java 中使用 if(flag) 可以同样高效。
【解决方案2】:

我正在使用 ANT 构建脚本来构建我的 java 项目。我有一个 build.properties,其中包含变量可以具有的各种值。我的 build.xml 实现了各种特定的构建目标,例如调试、发布、测试。使用不同的 ant 构建目标(ant 调试、ant 发布),我可以使用相同的代码库拥有各种版本的 jar。非常适合基于 ant 目标的构建时间变量。

build.properties

# Build Parameters
# Turn On of Off debugging
config.debug_true=true
config.debug_false=false

Config.java 在项目的某处定义这个 java 类。我在项目目录下的/config文件夹中做了。

package com.stackoverflow.ajitk;

public class Config {

   // Build for DEBUG or RELEASE
   public final static boolean DEBUG = @CONFIG.DEBUG@;
}

build.xml

<?xml version="1.0" encoding="UTF-8"?>
<project name="ABC" default="release">
    <property file="build.properties" />

...

  <macrodef name="copy-release-parameters">
      <sequential>
    <property name="config-target-path" value="gen/com/stackoverflow/ajitk"/>
    <!-- Copy the configuration file, replacing tokens in the file. -->
    <copy file="config/Config.java" todir="${config-target-path}"
    overwrite="true" encoding="utf-8">
    <filterset>
        <filter token="CONFIG.DEBUG" value="${config.debug_false}"/>
        <--... add more variables as needed by your project ... -->
    </filterset>
    </copy>
      </sequential>
  </macrodef>

...

<-- the above macro should be used in your release/debug target -->

...

</project>

【讨论】:

  • 如果您在使用这种方法时遇到任何问题,请告诉我...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-03
  • 1970-01-01
  • 2013-12-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多