通常需要快速收集值才能迭代它.而不是手动创建实例,添加项目或执行众所周知的构造函数初始化,从数组(Set<String> mySet = new HashSet<String>(Arrays.AsList("a", "b", "c")))创建列表集合我想创建一个应该为我做的工作的函数.
除了Fact之外,我想提供<S>用于集合类的泛型参数,我还想提供泛型参数<T>- 实际的类型Collection.
所以,我的第一个方法如下:
public static <T extends Collection<S>, S> T initializeCollection(Class<T> concreteClass, S... objects) {
T result;
try {
result = concreteClass.newInstance();
for (S s : objects) {
result.add(s);
}
return result;
} catch (InstantiationException e) {
return null;
} catch (IllegalAccessException e) {
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
这非常有效,可以像以下一样使用:
LinkedList<String> myList = StaticHelper.initializeCollection(LinkedList.class, "a", "b");
Run Code Online (Sandbox Code Playgroud)
要么
HashSet<Integer> mySet = StaticHelper.initializeCollection(HashSet.class, 1,2,3,4,5);
Run Code Online (Sandbox Code Playgroud)
从我现在测试的,这按预期工作.唯一的问题是验证器声明,正在进行未保存的类型转换.验证器说,使用Set的例子
Type safety: The …Run Code Online (Sandbox Code Playgroud) 我当前正在努力删除一个涉及各种关系的实体(仅限@ManyToOne) - 但是,Hibernate不会删除任何内容 - 在调用之后em.remove一切都保持不变.
我有5个实体(E1 - E5),引用有E6问题的实体(),如下所示:
@Entity
public class EX {
@OneToMany(mappedBy = "eX", fetch = FetchType.EAGER, cascade = { CascadeType.PERSIST, CascadeType.REMOVE })
private Set<E6> e6s;
}
Run Code Online (Sandbox Code Playgroud)
E6本身有相反的@ManyToOne关系:
public class E6{
@ManyToOne(optional = false)
private E1 e1;
@ManyToOne(optional = false)
private E2 e2;
@ManyToOne(optional = false)
private E3 e3;
@ManyToOne(optional = false)
private E4 e4;
@ManyToOne(optional = false)
private E5 e5;
}
Run Code Online (Sandbox Code Playgroud)
(遗漏了ID,其他列等......)
每当我打电话时em.remove(instanceOfE6),根本没有任何反应 …
实现算法以打印n对括号的所有有效(例如,正确打开和关闭)组合.示例:输入:3(例如,3对括号)输出:()()(),()(()),(())(),((()))
答案是 :
private static void printPar(int count)
{
char[] str = new char[count*2];
printPar(count,count,str, 0);
}
private static void printPar(int l, int r, char[] str, int count)
{
if(l < 0 || r < l)
return;
if (l ==0 && r == 0)
{
System.out.println(str);
}
else
{
if (l > 0 )
{
str[count] = '(';
printPar(l-1, r, str, count + 1);
}
if (r > 0)
{
str[count] = ')';
printPar(l, r-1, str, count + 1);
} …Run Code Online (Sandbox Code Playgroud) 对于一个项目,我需要一个唯一的ID生成器.所以我想到了具有同步方法的Singleton.
由于传统 Singleton模式(private static instance)之后的Singleton 是在Sessions中共享的,我想知道@SingletonAnnotation是否以相同的方式工作?
文件说: Identifies a type that the injector only instantiates once.
这是否意味着,a @Singleton将是独立的User Session(对于id-generator而言是坏的)?我是否更喜欢old school单身Class.getInstance()注射超过@Singleton-Bean?
或者我应该既不使用也不应该在@ApplicationScopedbean中提供服务?
最重要的是保证只有一个独立于用户会话的线程可以访问该方法来生成下一个id.(自动增量数据库ID无法解决)
编辑:JSF 2.2,CDI和javax.inject.*我在说:)
我正在为我的应用程序开发一个Autoupdater.(结合安装程序,更新程序和删除工具)
我想自动设置所有Stuff:
这非常有效.要写入Program Files和注册表,该工具需要管理员权限ofc.因此,在选择了所需的软件后,我添加了AppLauncher的"重启".就像这样:
ProcessStartInfo pi = new ProcessStartInfo(Directory.GetCurrentDirectory() + @"\AppLauncher.exe");
pi.Verb = "runas";
pi.Arguments = "install " + this.appItem.APID;
Process p = new Process();
p.StartInfo = pi;
try
{
p.Start();
Application application = Application.Current;
application.Shutdown();
}
catch (Exception ex)
{
MessageBox.Show("Unable to install the application.\n\n" + ex.ToString(), "Error",
application.Shutdown();
}
Run Code Online (Sandbox Code Playgroud)
如果用户将AppLauncher.exe保存在文件夹中的某个位置并通过双击启动它,此步骤也可以正常工作.
如果用户决定从浏览器点击"运行",安装程序将运行到显示的异常,说"找不到"AppLauncher.exe.我假设,从浏览器启动文件将设置不同的WorkingDirectory,因此
Directory.GetCurrentDirectory()
Run Code Online (Sandbox Code Playgroud)
将不会返回文件所在的适当值.如果用户决定给该文件另一个名称,它也可能不起作用.
那么,我能做些什么呢?
有没有像File.GetCurrentFile():P
我已经登陆了一列看起来像这样的数据:
1[::]One[::]2[::]Two[::]3[::]Three
Run Code Online (Sandbox Code Playgroud)
如何将其拆分为C#中的Dictionary?给:
1,"One"
2,"Two"
3,"Three"
Run Code Online (Sandbox Code Playgroud)
正则表达式是正确的方法吗?
我已经走到了这一步,\d+\[::]但我不确定下一步该做什么