我有一个Java的枚举,每个枚举成员都有许多参数.我想要做的是将这些参数之一作为字符串数组,但我似乎无法进行正确的初始化.
这是我尝试过的:
private static enum DialogType {
ACCCAT("Acccat", new String[] {"acccatid"}, "acccatText", "dlg7Matchcode", "Zutritts\nkategorie", "Text"),
private String mDialogName;
private String[] mKeyField;
private String mTextField;
private String mSelectFields;
private String mKeyFieldHeader;
private String mTextFieldHeader;
private DialogType(String dialogName, String[] keyField, String textField, String selectFields, String keyFieldHeader, String textFieldHeader) {
mDialogName = dialogName;
mKeyField = keyField;
mTextField = textField;
mSelectFields = selectFields;
mKeyFieldHeader = keyFieldHeader;
mTextFieldHeader = textFieldHeader;
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我遇到了大量的语法错误.有任何想法吗?
我的应用程序中有以下类:
class A {
String someString;
Locale someLocale;
Map<Integer, B> someMap = new HashMap<Integer, B>();
fillMap() {
// some logic to fill the map with instances of B
}
}
class B {
// lots of filled collections
}
Run Code Online (Sandbox Code Playgroud)
我正在与 JProfiler 进行分析会话以识别一些内存问题。在内存视图选项卡上,使用聚合级别类,例如我有 2000 个 A 实例,总大小为 156KB。
我的问题是这个尺寸意味着什么?它只是对 A 对象的引用的大小,还是 A 的所有填充成员的大小(我特别想知道 Map )?我想这只是 A 参考尺寸,但想确保这一点。
我需要一个代表接口的变量.我想知道这样的变量是否有"标准"名称,例如类变量的clazz.我想把它命名为接口,但我不喜欢这个名字......
我正在寻找一个免费的Java API,它提供了计算GPS坐标之间距离的基本功能.我需要两点之间的基本getDistance,即一个点周围半径的兴趣点.
我做了一些研究,一方面发现了一些选择.
一方面有Apache SIS(http://incubator.apache.org/sis/index.html),但这仍在开发中,可能会改变一些.另一方面是GeoTools(http://docs.geotools.org/),但这对我的需求来说相当复杂.
还有其他易于使用且更简单的API吗?
另一种选择是简单地自己实现所有这些,我已经看到了一些自己的实现的例子,但是它们都有一些类似的评论:"这不是真正的工作,它提供的距离是100米".这样的实施有多可靠?
我有一个关于 Java 中参数数量可变的方法的性能问题。
假设我有以下两种选择:
public static final boolean isIn(int i, int v1, int v2) {
return (v1 == i) || (v2 == i);
}
public static final boolean isIn(int i, int... values) {
for (int v : values) {
if (i == v) {
return true;
}
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
现在,当我的第一个方法的参数达到 20、30 甚至 50 个时,主要问题就出现了。现在这样只会伤眼睛。好的,这是遗留代码,我想用唯一的一个变量参数方法替换所有代码。
知道这对性能会有什么影响吗?编译器是否有可能对第二种方法进行一些优化,使其或多或少类似于第一种形式?
编辑:好吧,也许我还不够清楚。对于具有 50 个参数的方法,我没有遇到性能问题。正如 Peter Lawrey 所说,这只是关于可读性。我想知道如果我切换到参数数量可变的新方法,会出现性能问题。
换句话说:如果您关心性能,最好的方法是什么?具有 50 个参数的方法还是唯一一种具有可变参数的方法?
假设我有一个A类,它有一个相关元素列表(元素类型不相关):
public class A {
private List<String> list;
public List<String> getList() {
return list;
}
public void addElement(String element) {
list.add(element);
}
}
Run Code Online (Sandbox Code Playgroud)
现在我希望从另一个类Client访问此列表.我需要添加一个新元素.从设计的角度来看,问题是一个更具哲学性的问题.
public class Client {
private A a = new A();
public void method1() {
a.getList().add("");
}
public void method2() {
a.addElement("");
}
}
Run Code Online (Sandbox Code Playgroud)
如果有人能指出任何这些方法的任何优势,将不胜感激.谢谢.
说我有以下情况:
abstract class A {
abstract method1();
abstract method2();
}
class B extends A {
method1() {
// implementation 1
}
method2() {
// implementation 3
}
}
class C extends A {
method1() {
// implementation 1
}
method2() {
// implementation 4
}
}
class D extends A {
method1() {
// implementation 2
}
method2() {
// implementation 4
}
}
Run Code Online (Sandbox Code Playgroud)
底线:同一类的几个子类,使用不同方法的不同方法实现.
问题是我在不同的子类中有相同的实现.我的问题是如何处理这些常见的实现?
这样做的逻辑方法是创建另一个抽象级别,但只有当我有一个具有常见实现的方法时才能工作(因为Java没有多重继承).我还可以将最常用的实现放在超类中,并且只在其他类中以不同方式实现它.但是,我不这样做,因为随着时间的推移,最常见的实现可能会随着其他类的添加而改变,此外,我希望将方法保持在超类中.
是否有一些模式能够以"优雅的方式"解决我的问题?
我正在尝试创建一个解析以下内容的语法:
reference: java.util.String
Run Code Online (Sandbox Code Playgroud)
但同样
reference: {java.util.String, java.lang.Integer}
Run Code Online (Sandbox Code Playgroud)
换句话说,我希望它既解析一个合格名称列表,也只解析一个项目(在这种情况下不用'{'标记).
我试过的是这个:
Reference:
'reference' ':' ('{' values+=QualifiedName (',' values+=QualifiedName)* '}') | (values+=QualifiedName);
Run Code Online (Sandbox Code Playgroud)
但是,我收到一个错误:在使用第一种形式的引用(没有{)时,在'java'中缺少'{'.有什么建议我应该尝试一下吗?
编辑:也尝试过
Reference:
'reference' ':' ('{' values+=QualifiedName (',' values+=QualifiedName)* '}') | ((!'{')values+=QualifiedName);
Run Code Online (Sandbox Code Playgroud)
但在输入'!'时找不到可行的选择 语法定义中的错误.
编辑2:我没有"逗号分隔列表"的问题,我分开尝试了它,它运作良好.我唯一的问题是基于'{'字符来区分规则的两个部分.