我最近继承了需要修剪和清理的C#控制台应用程序.简而言之,该应用程序由一个包含超过110,000行代码的类组成.是的,一个班级超过110,000行.而且,当然,该应用程序是我们业务的核心,运行'全天候更新动态网站上使用的数据.虽然我被告知我的前任是"一个非常优秀的程序员",但显然他根本没有进入OOP(或版本控制).
无论如何......在熟悉代码的同时,我发现了许多声明的方法,但从未引用过.看起来好像使用了复制/粘贴来对代码进行版本化,例如说我有一个名为getSomethingImportant()的方法,很可能还有另一个名为getSomethingImortant_July2007()的方法(在大多数情况下,模式是functionName_ [datestamp]).看起来当程序员被要求对getSomethingImportant()进行更改时,他会复制/粘贴然后重命名为getSomethingImortant_Date,对getSomethingImortant_Date进行更改,然后将代码中的任何方法调用更改为新方法名称,将旧方法保留为代码但从未引用过.
我想编写一个简单的控制台应用程序,它可以遍历一个巨大的类,并返回所有方法的列表,其中包含每个方法的引用次数.根据我的估计,有超过1000种方法,所以手动这样做需要一段时间.
我可以使用.NET框架中的类来检查此代码吗?或者任何其他有用的工具,可以帮助识别声明但从未引用的方法?
(旁边的问题:有没有其他人见过像这样的C#应用程序,一个大的类?它或多或少是一个巨大的程序过程,我知道这是我见过的第一个,至少是这个大小.)
我有一个ArrayList,由从db导入的不同元素组成,由字符串,数字,双精度和整数组成.有没有办法使用反射类型技术来找出每个元素包含的每种类型的数据?
仅供参考:有这么多类型数据的原因是这是一段用不同的数据库编写的java代码.
使用Java将非ASCII文件名添加到zip文件的最佳方法是什么,这样可以在Windows和Linux中正确读取文件?
这是一个改编自https://truezip.dev.java.net/tutorial-6.html#Example的尝试,它在Windows Vista中运行但在Ubuntu Hardy中失败.在Hardy中,文件名在文件夹中显示为abc-ЖДФ.txt.
import java.io.IOException;
import java.io.PrintStream;
import de.schlichtherle.io.File;
import de.schlichtherle.io.FileOutputStream;
public class Main {
public static void main(final String[] args) throws IOException {
try {
PrintStream ps = new PrintStream(new FileOutputStream(
"outer.zip/abc-åäö.txt"));
try {
ps.println("The characters åäö works here though.");
} finally {
ps.close();
}
} finally {
File.umount();
}
}
}
Run Code Online (Sandbox Code Playgroud)
与java.util.zip不同,truezip允许指定zip文件编码.这是另一个示例,这次明确指定编码.IBM437,UTF-8和ISO-8859-1都不适用于Linux.IBM437适用于Windows.
import java.io.IOException;
import de.schlichtherle.io.FileOutputStream;
import de.schlichtherle.util.zip.ZipEntry;
import de.schlichtherle.util.zip.ZipOutputStream;
public class Main { …
Run Code Online (Sandbox Code Playgroud) 假设我有公共方法A和B的BaseClass,我通过继承创建DerivedClass.
例如
public DerivedClass : BaseClass {}
Run Code Online (Sandbox Code Playgroud)
现在我想在DerivedClass中开发一个使用A和B的方法C.有没有办法可以在DerivedClass中将方法A和B重写为私有,这样只有方法C才会暴露给想要使用我的DerivedClass的人?
我正在写一个bash脚本以自动方式处理一些安装...我有可能得到32或64位二进制的一个这样的程序...是否有可能从bash检测机器架构,所以我可以选择正确的二进制?
这将适用于Ubuntu机器.
内置PHP
的扩展SOAP
不验证传入一切SOAP
反对该请求XML Schema
的WSDL
.它确实检查了基本实体的存在,但是当你有像复制这样复杂的东西时simpleType
,扩展几乎忽略了它们的存在.
验证包含在内的SOAP
请求的最佳方法XML Schema
是WSDL
什么?
我已经知道如何:
使用以下命令将属性文件加载到Spring配置中
<context:property-placeholder location="aaa/bbb/ccc/stuff.properties"/>
Run Code Online (Sandbox Code Playgroud)
使用以下方法动态构建属性对象:
<props><prop key="abc">some value</prop></props>
Run Code Online (Sandbox Code Playgroud)
但我无法做到并且真正有用的是让Spring加载一个属性文件,然后构建匹配的属性对象.然后我可以正常方式将它注入bean中.
我在其他地方搜索过这个但没有成功.有任何想法吗?
我们在工作中维护基于RPM的软件分发,以便我们在所有支持的平台上拥有一套通用软件.因此,我们必须构建许多第三方软件,并经常发现需要运行autoconf/automake/libtoolize/etc以使其在Solaris或其他平台上构建的情况.
我的结果非常复杂.看起来这些工具相当脆弱,并且文件通常仅适用于最初编写的autoconf/automake/etc版本.
理想情况下,我只想支持一个版本的GNU autotools,但我得到的印象是,我真的最终必须拥有每个版本的副本.
这是不寻常的,还是其他人有同样的问题?是否有一部分autotools版本可以涵盖所有案例?
通常,我偶尔会有一系列嵌套宏,其定义中包含一些预处理器条件元素.这些可能很难调试,因为很难直接看到正在执行的代码.
前一段时间我依稀记得找到一个编译器(gcc)标志来扩展它们,但是我在实践中遇到这个问题很困难.