我有一些自动注释的问题.我的应用程序如下所示:
这是控制器:
@Controller
public class MyController {
@Autowired
@Qualifier("someService")
private SomeService someService;
....
}
Run Code Online (Sandbox Code Playgroud)
这是一个服务层:
public interface SomeService {
...
}
@Service
public class SomeServiceImpl implements SomeService{
@Autowired
@Qualifier("myDAO")
private MyDAO myDAO;
....
}
Run Code Online (Sandbox Code Playgroud)
和DAO层:
public interface MyDAO{
....
}
@Repository
public class JDBCDAOImpl implements MyDAO {
@Autowired
@Qualifier("dataSource")
private DataSource dataSource;
....
}
Run Code Online (Sandbox Code Playgroud)
这是一个app-service.xml文件:
....
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
p:location="/WEB-INF/jdbc.properties" />
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource"
p:driverClassName="${jdbc.driverClassName}"
p:url="${jdbc.url}"
p:username="${jdbc.username}"
p:password="${jdbc.password}"/>
<bean id="SomeService" class="com.service.SomeServiceImpl" />
<bean id="myDAO" class="com.db.JDBCDAOImpl" />
Run Code Online (Sandbox Code Playgroud)
所以......当我启动一个web-app时,MyController自动正确(SomeServiceImpl类对象正确注入someService字段),但someService的myDAO feild有空值(未正确注入).
你能帮我找个问题吗?
PS它很有意思,但是当我将myDAO中的"bean …
请考虑以下代码:
object foo {
trait Bar[Q[_]]
implicit object OptionBar extends Bar[Option]
def test[T, C[_]](c: C[T])(implicit bar: Bar[C]) = ()
def main(args: Array[String]) {
test(Some(42): Option[Int]) //???
}
}
Run Code Online (Sandbox Code Playgroud)
这是有效的,但我需要输入Some(42)作为Option [Int],否则隐式对象OptionBar将不会被解析(因为预期会改为Bar [Some]).有没有办法避免显式输入,所以我在测试中得到隐含的OptionBar对象,即使我用Some或None提供测试?
[澄清]
Bar抽象类等它也应该工作.implicit object listBar extends Bar[list][更新]
似乎使Bar的参数逆变成功了:
object foo {
trait Bar[-Q[_]] //<---------------
implicit object OptionBar extends Bar[Option]
implicit object ListBar extends Bar[List]
def test[T, C[_]](c: C[T])(implicit bar: Bar[C]) = ()
def main(args:Array[String]) {
test(Some(42))
}
}
Run Code Online (Sandbox Code Playgroud)
但当然这是对Bar的可能性的严重限制,所以我仍然希望得到更好的答案.
考虑以下类型类:
class Listable a where
asList :: a t -> [t]
Run Code Online (Sandbox Code Playgroud)
使用一个参数为类型创建实例很容易:
instance Listable [] where
asList = id
instance Listable Maybe where
asList (Just x) = [x]
asList Nothing = []
Run Code Online (Sandbox Code Playgroud)
现在,我将如何为具有两个相同类型参数的对创建实例?当然我可以做一些包装:
data V2 a = V2 a a
v2 (p,q) = V2 p q
instance Listable V2 where
asList (V2 p q) = [p,q]
Run Code Online (Sandbox Code Playgroud)
现在我可以写出像这样的东西asList $ v2 (47, 11),但这种方式会失败.
有没有办法将对的类型限制为两个类型参数相等的情况,并为此编写Listable实例?如果没有,通常的解决方法是什么?
为什么没有monad实例Control.Applicative.Const?以下定义是正确的,还是违反了monad法则?
instance Monoid a => Monad (Const a) where
return _ = Const mempty
(Const x) >>= _ = Const x
Run Code Online (Sandbox Code Playgroud)
你能想到任何有用的应用吗?
我玩过Java 8 ea b72,但是我遇到了编译器错误.有没有办法从javac获取更多信息,例如它目前正在处理的文件列表?如果我有一个大概的想法,我可以找到一个解决方法,直到问题得到解决.
只是为了记录,这里是堆栈跟踪(如果在IntelliJ IDEA,BTW之外编译,它看起来相似):
An exception has occurred in the compiler (1.8.0-ea). Please file a bug at the Java Developer Connection (http://java.sun.com/webapps/bugreport) after checking the Bug Parade for duplicates. Include your program and the following diagnostic in your report. Thank you.
java.lang.AssertionError: arraycode A
at com.sun.tools.javac.jvm.Code.arraycode(Code.java:297)
at com.sun.tools.javac.jvm.Gen.makeNewArray(Gen.java:1827)
at com.sun.tools.javac.jvm.Gen.visitNewArray(Gen.java:1800)
at com.sun.tools.javac.tree.JCTree$JCNewArray.accept(JCTree.java:1482)
at com.sun.tools.javac.jvm.Gen.genExpr(Gen.java:893)
at com.sun.tools.javac.jvm.Gen.genArgs(Gen.java:912)
at com.sun.tools.javac.jvm.Gen.visitApply(Gen.java:1746)
at com.sun.tools.javac.tree.JCTree$JCMethodInvocation.accept(JCTree.java:1391)
at com.sun.tools.javac.jvm.Gen.genExpr(Gen.java:893)
at com.sun.tools.javac.jvm.Gen.visitReturn(Gen.java:1715)
at com.sun.tools.javac.tree.JCTree$JCReturn.accept(JCTree.java:1310)
at com.sun.tools.javac.jvm.Gen.genDef(Gen.java:683)
at com.sun.tools.javac.jvm.Gen.genStat(Gen.java:718)
at com.sun.tools.javac.jvm.Gen.genStat(Gen.java:704)
at com.sun.tools.javac.jvm.Gen.genStats(Gen.java:755)
at com.sun.tools.javac.jvm.Gen.visitBlock(Gen.java:1090)
at com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:835) …Run Code Online (Sandbox Code Playgroud) 我遇到了与Haskell Random generator相关的问题.在大学里,我必须一直处理Java,所以现在我已经腐败了.我正在Haskell开发一款游戏,现在我面临的是"有机会做某事",这种机会需要像Int -> Bool.在Java中,我会做到的
new Random().nextInt(100)
Run Code Online (Sandbox Code Playgroud)
问题解决了!在Haskell中,我必须在monad IO中选择一些东西或者使用种子.这些都不是我想要的.我真的不想在我的纯模型中使用IO monad,种子很难用,因为我每次都需要记住我的新种子......
有没有简单的像Java的随机?
在semigroupoids包中,我发现了以下定义:
class (Foldable1 t, Traversable t) => Traversable1 t where
traverse1 :: Apply f => (a -> f b) -> t a -> f (t b)
sequence1 :: Apply f => t (f b) -> f (t b)
sequence1 = traverse1 id
traverse1 f = sequence1 . fmap f
Run Code Online (Sandbox Code Playgroud)
为什么上下文边界设置为Apply(Applicative没有pure)而不是Functor?显然你需要覆盖其中一个定义,所以这只是"只"一个不可能Functor吗?
我正在尝试解决Euler问题78,它基本上要求分区函数 p(n)可被1000000整除的第一个数字.
我使用基于五边形数字的欧拉递归公式(这里pents与正确的符号一起计算).这是我的代码:
ps = 1 : map p [1..] where
p n = sum $ map getP $ takeWhile ((<= n).fst) pents where
getP (pent,sign) = sign * (ps !! (n-pent))
pents = zip (map (\n -> (3*n-1)*n `div` 2) $ [1..] >>= (\x -> [x,-x]))
(cycle [1,1,-1,-1])
Run Code Online (Sandbox Code Playgroud)
虽然ps似乎产生了正确的结果,但它太慢了.有没有办法加快计算速度,还是需要一种完全不同的方法?
考虑:
public interface Foo<T> {
public static class X{}
public void foobar(T t);
}
public class Bar<X> {
Foo<X> foo = new Foo<X>() {
public void foobar(X t) {}
};
}
Run Code Online (Sandbox Code Playgroud)
我发现没有办法表达,我的意思是X从Bar<X>,而不是Foo.X在foobar(X t)执行.难道就没有其他办法比重命名泛型参数X中Bar或静态内部类?
class Listy a b where
fromList :: [b] -> a
toList :: a -> [b]
lifted :: ([b] -> [b]) -> (a -> a)
lifted f = fromList . f . toList
data MyString = MyString { getString :: String } deriving Show
instance Listy MyString Char where
toList = getString
fromList = MyString
Run Code Online (Sandbox Code Playgroud)
现在我需要写例如lifted (reverse::(String -> String)) (MyString "Foobar").是否有诀窍避免需要类型签名?
haskell ×6
java ×2
typeclass ×2
annotations ×1
autowired ×1
generics ×1
implicit ×1
java-8 ×1
javac ×1
math ×1
monads ×1
name-clash ×1
performance ×1
random ×1
scala ×1
spring ×1
spring-mvc ×1