小编sla*_*ery的帖子

Java类可以在运行时向自己添加方法吗?

一个类可以在运行时向自己添加一个方法(比如从一个static块),这样如果有人在这个类上执行反射,他们会看到新方法,即使它没有在编译时定义?

背景:

我正在使用的框架要求按惯例Action定义具有doAction(...)方法的类.框架在运行时检查这些类,以查看其doAction()方法中可用的参数类型.例如:doAction(String a,Integer b)

我希望每个类能够以编程方式生成doAction()具有各种参数的方法,并在检查时及时生成.方法的主体可以是空的.

java reflection code-generation javassist

57
推荐指数
4
解决办法
5万
查看次数

为什么我的Git存储库比Mercurial版本大得多?

我使用快速导出将Mercurial存储库转换为Git.但Git存储库非常庞大:Git为18 GB,Mercurial为3.4 GB.我的清理步骤都没有帮助.

我的Mercurial存储库由一个65 MB文件(SQLite格式的Anki抽认卡)主导,每天更新.它的历史已经增长到2.9 GB,低于.hg/store/data.

我希望Git能够更好地压缩历史记录,但我无法将存储库缩小到18 GB以下!

我试过git prune,git gc和其他人一样无济于事.我甚至尝试压缩.git文件夹,它仍然是18 GB.

我错过了什么吗?

更新:我尝试了Bazaar(bzr),它将我的存储库压缩到仅2.3 GB.太好了!

git mercurial

13
推荐指数
2
解决办法
1713
查看次数

如何将timestamp列映射到JPA类型?

我正在玩Play!1.2.4和PostgreSQL 9.1.我创建了一个带有created_at列的表,类型为:timestamp without time zone.它的默认值为now().

当我使用我的Entity类为此表获取数据时出现问题.这个createdAt领域总是回来null.这是字段定义:

@Column(name="created_at", insertable=false)
public java.sql.Date createdAt;
Run Code Online (Sandbox Code Playgroud)

所有其他字段都正确填充.我试图改变字段类型为Date,Calendar,Timestamp等等,并试图增加一个@Timestamp注释.但没有任何组合证明是成功的.

在此先感谢您的帮助!

作为参考,这是我用来创建表的DDL.

CREATE TABLE Users
(
  id serial     NOT NULL,
  username text NOT NULL,
  email text    NOT NULL,
  password_hash text NOT NULL DEFAULT 0,
  created_at timestamp without time zone DEFAULT now(),
  CONSTRAINT Users_pkey PRIMARY KEY (id),
  CONSTRAINT Users_username_key UNIQUE (username)
);
Run Code Online (Sandbox Code Playgroud)

更新: 我认为问题与使用JPA插入记录有关.数据库填充默认值now()for created_at,但是在获取该行时Hibernate不知道它是什么.

如果我查询已经存在的行,createdAt则会正确填充该字段!好的......这缩小了问题的范围.

postgresql jpa playframework

9
推荐指数
1
解决办法
3万
查看次数

什么是Java的Class <X>类型的C#等价物?

在Java中,Class使用泛型参数X很方便.但是C#的Type类没有这个.

那么在C#中,如何处理以下Java代码?

public <X> X methodThatReturns(Class<X> clazz) { ... }
Run Code Online (Sandbox Code Playgroud)

在C#中似乎没有办法连接返回值和传递的Type.

澄清
几个答案表明方法参数不是必需的,因为该方法可以简单地定义为methodThatReturns<X>().

但是如果你确实有一些未知的Type变量,t那么基本上没有办法调用这样的泛型方法,以便返回Type的对象t

在Java中,您可以自由地传递Class<X>变量而不会丢失类型信息,但似乎在C#中如果传递等效Type变量,则可能会遇到限制,因为当您需要调用泛型时不能使用它们方法.

c# generics

8
推荐指数
1
解决办法
1万
查看次数